2009-11-23 5 views
4

Je développe un site Web qui fournit, entre autres, des blogs via l'API Metaweblog. L'API fonctionne assez bien avec plusieurs clients de blog, mais Windows Live Writer me tue.Pourquoi Windows Live Writer ne fonctionne pas avec mon fournisseur d'API MetaWebLog?

J'ai effectué une trace réseau pour capturer le trafic de va-et-vient réel. Voici les résultats:

WLW demande l'URL, le nom d'utilisateur et le mot de passe de mon blog. L'URL est/item/list/type/blog/utilisateur/1/bloguser/1, et je fournis ceci.

Je vois WLW faire une requête HTTP pour cette URL. Il obtient une réponse. Cette réponse inclut les balises de liaison RSD et wlwmanifest.

La demande suivante de WLW est pour/mwapi/rsd/bloguser/1, qui est l'URL correcte.

La réponse est la réponse MetaWeblog RSD:

<?xml version="1.0" encoding="UTF-8"?> 
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd"> 
<service> 
<engineName>Cahoots2</engineName> 
<engineLink>http://sourceforge.net/projects/cahoots/</engineLink> 
<homePageLink>http://10.0.1.39:8888</homePageLink> 
<apis> 
    <api name="MetaWeblog" blogID="1" preferred="true" apiLink="http://10.0.1.39:8888/mwapi/index" /> 
</apis> 
</service> 
</rsd> 

la prochaine demande de WLW est de/mwapi/index. C'est l'appel de méthode à blogger.getUsersBlogs. La demande est:

.<?xml version="1.0" encoding="utf-8"?>.. 
<methodCall>.. <methodName>blogger.getUsersBlogs</methodName>.. 
<params>.. <param>.. <value>.. 
<string>ffffffabffffffce6dffffff93ffffffac29ffffffc9fffffff826ffffffdeffffffc9ffffffe43c0b763036ffffffa0fffffff3ffffffa963377716</string>.. 
</value>.. 
</param>.. 
<param>.. 
<value>.. 
<string>CommunityAdmin</string>.. 
</value>.. 
</param>.. 
<param>.. 
<value>.. 
<string>password</string>.. 
</value>.. 
</param>.. </params>..</methodCall> 

Pardonner les périodes; ce sont des retours de chariot. Je saisis cela à partir d'une trace réseau.

La réponse du serveur est également en XML:

.<?xml version="1.0" encoding="UTF-8"?>.<methodResponse><params><param><value> 
<struct><member><name>blogid</name><value><int>1</int> 
</value></member><member><name>url</name><value> 
<string>http://10.0.1.39:8888/item/list/type/blog/user/1/bloguser/1</string> 
</value></member><member><name>blogname</name><value> 
<string>CommunityAdmin @ Cahoots!</string></value></member></struct></value> 
</param></params></methodResponse>. 

Cela semble correct pour moi. Le BlogID est correct, l'URL est correcte et le nom du blog est correct. WLW répète ensuite l'appel de méthode getUsersBlogs d'origine. Il obtient une réponse identique. WLW affiche ensuite «Une connexion a été établie avec succès sur votre compte, mais le serveur a signalé que vous ne possédez pas encore de blog actif. Assurez-vous que votre compte auprès de ce fournisseur est à jour avant de continuer».

WLW n'a fait aucune autre demande HTTP au-delà de celles que j'ai décrites ici.

Des indices quelconques de ce que je fais de mal? Je me suis assuré qu'un fichier wlwmanifest.xml est disponible, et en fait toute demande pour wlwmanifest.xml (par exemple, /this/is/not/it/wlwmanifest.xml) retournera toujours le bon fichier.

EDIT: J'ai réalisé que je ne retournais pas un tableau de ma méthode getUsersBlogs. Quand j'ai changé que la réponse HTTP de l'appel de la méthode est:

.<?xml version="1.0" encoding="UTF-8"?>.<methodResponse><params><param><value><array><data><value> 
<struct><member><name>blogid</name><value><int>1</int></value></member> 
<member><name>url</name><value> 
<string>http://10.0.1.39:8888/item/list/type/blog/user/1/bloguser/1</string> 
</value></member><member><name>blogname</name><value> 
<string>CommunityAdmin @ Cahoots!</string></value></member></struct></value> 
</data></array></value></param></params></methodResponse>. 

Cela semble identique à ce qui est décrit au http://msdn.microsoft.com/en-us/library/aa905665.aspx comme exemple de réponse. Mais, WLW a affiché une erreur - "Référence d'objet non définie à une instance d'un objet." Encore une fois, les données de réponse réelles n'incluent pas les périodes - c'est ainsi que Network Monitor représente les retours chariot.

J'ai effectué des tests de test à partir d'un faisceau de test et cela fonctionne correctement avec des réponses identiques. Et, comme je l'ai dit, cela fonctionne avec d'autres clients de blogs. Aidez-moi.

Répondre

1

WLW, il semble, est très pointilleux sur l'implémentation MWA. Je ne capitalisais pas correctement l'un des noms de méthodes.

+0

Je sais que c'est un sujet ancien, mais je suis en train de mettre en œuvre WLW dans AspNetCore. J'ai le même problème avec la 'référence d'objet non définie' Quelle méthode avez-vous mis-capitaliser? –

Questions connexes