4

我有一个简单的 WCF (.NET 3.5) 服务应用程序,当我打开一个新项目时,它具有由 VS 2008 创建的默认代码。

我在 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>

请建议我应该如何进行。任何帮助表示赞赏。

4

1 回答 1

0

是因为 wsHttpBinding 默认集成了安全性。试试这个禁用 WCF 的安全性:

网页配置

<wsHttpBinding>
    <binding name="binding1">
      <security mode="None">
        <transport clientCredentialType="None" />
         <message establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
于 2013-09-16T10:36:02.957 回答