将查询字符串参数添加到接受Stream的WCF服务操作

时间:2011-01-20 12:16:26

标签: wcf json .net-3.5 configuration

有没有办法配置webHttpBinding WCF服务来接受多个 querystring 参数,Stream参数是请求的主体?

我想这样做而不会从操作签名中省略查询字符串参数并直接从OperationContext访问它们。

UriTemplate似乎是明显的选择,但这只会导致抛出AddressFilter不匹配异常。

将参数移动到MessageContract并使用所有非Stream字段上的MessageHeader属性,以避免“Stream可能是唯一的参数”错误,导致webHttpBinding不支持MessageHeader属性的错误。

只留下MessageContract上的Stream参数告诉我,无论如何,在MessageContracts中都不支持Streams for WebScriptEnablingBehavior。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

解决方法是:

  1. 使用[WebInvoke]Method="POST" UriTemplate属性标记操作,该属性包含查询字符串中的非流参数
  2. 将端点的绑定设置为webHttpBinding
  3. <webHttp/>添加到您的终端的behaviorConfiguration
  4. 在端点的绑定配置上设置transferMode="Streamed"
  5. 有些事情需要注意:

    • wsHttpEndPoint和basicHttpEndPoint不支持流和非流参数的混合。如果需要SOAP + webHttpBinding,则需要使用两个服务接口和两个端点(尽管可以共享具体实现)。
    • WSDL生成器也不支持它,所以你需要在webHttp端点上禁用mex,否则在访问帮助页面时会抛出异常(尽管调用服务仍然没问题)