2011-07-20 23 views
3

WSDLを使用せずにChannelFactory経由でSOAPサービスを呼び出しています。私はこのサービスの複数のバージョンを消費していると私はプロジェクト/設定ファイル内のWSDLの複数のバージョンを持つことを避けようとしています。次のようにWSDLを使用せずにChannelFactory経由でSOAPサービスを呼び出す

コードは次のとおりです。

私はSOAPリクエストとレスポンスが戻ってくるだけで罰金参照フィドラーを使用して
[ServiceContract()] 
public interface IServiceContract 
{ 
    [OperationContract(Name = "login")] 
    string login(string username); 
} 

public void UserLogin() 
{ 
    IServiceContract service = new ChannelFactory<IServiceContract>(
     new BasicHttpBinding(), 
     "http://myurl.com/index.php/api/v2_soap/index/") 
     .CreateChannel(); 

    var sessionId = service.login("username"); 
} 

。しかし、ネームスペースの問題により、応答メッセージがデシリアライズされないことがあります。

エラーメッセージ: 「ログイン」操作の応答メッセージ本文をデシリアライズする際にエラーが発生しました。 OperationFormatterが無効なMessage本体を検出しました。名前 'loginResponse'と名前空間 'http://tempuri.org/'を持つノードタイプ 'Element'を見つけることが期待されます。見つかったノードタイプ「要素」の名前で「NS1:loginResponse」と名前空間「壷:foo」で

ので、同様に、私は名前空間を含めるために私のServiceContractを更新した場合:

[ServiceContract(Namespace="urn:Foo")] 
public interface IServiceContract 
{ 
    [OperationContract(Name = "login")] 
    string login(string username); 
} 

エラーメッセージが離れて行くが、メソッドは実際の値の代わりにnullを返すようになりました。もう一度私はFiddlerでXMLを見ることができ、私が探している価値は応答にありますが、それでも要素ns1:loginResponseを見つけることができないようです。

問題は、与えられた名前空間のすべての要素にns1というプレフィックスが付いていることを知るために、どのようにChannelFactoryを設定するのですか?

+0

私はサービスがWCFに実装されていないと仮定していますか?あなたはFiddlerでそれらを見ることができるように、リクエストとレスポンスの両方の例を投稿できますか? – mthierba

答えて

0

私はあなたが望むものを達成するために、純粋な設定オプションがあるとは思わない...しかし、オプションがあります - あなたはIClientMessageInspectorを使用することができます。

これはあなたのように、発信および着信メッセージを変更するには、あなたを提供しています例えば、変更のために/必要なものは何でも確認することができます...

http://msdn.microsoft.com/en-us/library/aa717047.aspx
http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector.aspx
http://social.technet.microsoft.com/wiki/contents/articles/how-to-inspect-wcf-message-headers-using-iclientmessageinspector.aspx
http://weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf-message-inspector.aspx
http://www.codeproject.com/KB/WCF/ExtendingWCF_PartI.aspx

関連する問題