新しいプロジェクトを開いたときにVS 2008によって作成されたデフォルトコードを持つ単純なWCF(.NET 3.5)サービスアプリケーションがあります。
web.config ファイルに次の構成の wshttpbinding があります。
<system.serviceModel>
<services>
<service name="WCFTestServiceApp.Service1" behaviorConfiguration="WCFTestServiceApp.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="wsHttpBinding" contract="WCFTestServiceApp.IService1" bindingConfiguration="binding1">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="binding1">
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="WCFTestServiceApp.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
この WCF アプリケーションを実行し、VS 2008 WCFTESTCLIENT を使用してメッセージを送受信できました。SoapUI ツールでは同じことができません。basichttpBinding に切り替えると、SOAP 1.1 バージョンとして動作するようです。しかし、wsHttpBinding (SOAP 1.2) は機能していないようです。
以下は、SoapUI ツールで受け取る要求メッセージと応答メッセージです。
リクエスト
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header/>
<soap:Body>
<tem:GetData>
<!--Optional:-->
<!--type: int-->
<tem:value>3</tem:value>
</tem:GetData>
</soap:Body>
</soap:Envelope>
応答
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Sender</s:Value>
<s:Subcode>
<s:Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-IN">The message could not be processed. This is most likely because the action 'http://tempuri.org/IService1/GetData' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.</s:Text>
</s:Reason>
</s:Fault>
</s:Body>
</s:Envelope>
どのように進めればよいかアドバイスをお願いします。どんな助けでも大歓迎です。