配置WCF服务服务器端以接受Mtom

时间:2015-01-20 11:00:56

标签: c# .net web-services wcf soap

我对网络服务很陌生,我试图配置我的WCF服务,使用Visual WCF服务模板从其他服务中提取文件。

我设法拉除了内容数据以外的所有内容。我已经搜索过,发现我必须使用Mtom而不是Text来进行消息编码。问题是我不确定如何配置我的Web服务以使用MessageEncoding = Mtom。我已经摆弄了web.config文件,但我似乎无法正确配置它。

这是我的服务界面

 [ServiceContract]
public interface IService
{

    [OperationContract]
    string test(changeData data);
    [OperationContract]
    RetrieveChangeListResponse GetChangeList();
    [OperationContract]
    RetrieveChangeTaskListResponse GetTaskList();
    [OperationContract]
    RetrieveInteractionAttachmentResponse GetFile(string id);

    // TODO: Add your service operations here
}

这是我的web.config

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000"
             messageEncoding ="Mtom">
      <readerQuotas maxDepth="32"
           maxArrayLength="200000000"
           maxStringContentLength="200000000"/>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="IService"
           behaviorConfiguration="ServiceWithMetadata">
    <endpoint name="BasicHttpBinding_IService"
              binding="basicHttpBinding"
              bindingConfiguration="basicHttp"
              contract="IService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceWithMetadata">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

  

目前,如果使用此设置,我会收到此错误:

  

错误:无法从localhost获取元数据:50282 / Service.svc如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅URI上的MSDN文档:localhost:50282 / Service.svc元数据包含无法解析的引用:&#39; localhost:50282 / Service.svc&#39;。内容类型application / soap + xml;服务localhost:50282 / Service.svc不支持charset = utf-8。客户端和服务绑定可能不匹配。远程服务器返回错误:(415)无法处理消息,因为内容类型&#39; application / soap + xml;字符集= UTF-8&#39;不是预期的类型&text; / xml; charset = utf-8&#39; .. HTTP GET错误URI:localhost:50282 / Service.svc HTML文档不包含Web服务发现信息。

如果删除这些设置,我会遇到如下类型不匹配:

  

客户发现&#39; multipart / related的响应内容类型;类型=&#34;文本/ XML&#34 ;; boundary =&#34; ---- = _ Part_0_30957184.1421681490926&#34;&#39;,但预期&#39; text / xml&#39;。

我知道有一个WcfTestClient的配置和实际服务的配置,但我不明白如何正确配置我的服务器端以正确接受Mtom编码。

有人可以解释如何正确配置服务器端绑定吗?我使用 BasicHttpBinding ,但也希望将 wshHttpBinding 用于soap 1.2功能。

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题在于使用的身份验证方法,我使用的是匿名而不是基本的。 此外,您不能拥有作为代理数据类型的方法返回类型。如果你有这样的方法,你会得到关于类派生的错误。