【问题标题】:Adding querystring parameters to a WCF service operation that accepts Stream将查询字符串参数添加到接受 Stream 的 WCF 服务操作
【发布时间】:2011-06-12 10:21:07
【问题描述】:

是否有任何方法可以配置 webHttpBinding WCF 服务以接受多个 querystring 参数,其中 Stream 参数是请求的主体?

我想在不省略操作签名中的查询字符串参数并直接从 OperationContext 访问它们的情况下执行此操作。

UriTemplate 似乎是显而易见的选择,但这只会导致引发 AddressFilter 不匹配异常。

将参数移动到所有非流字段上的带有 MessageHeader 属性的 MessageContract,以避免“Stream 可以是唯一的参数”错误,这会导致 WebHttpBinding 不支持 MessageHeader 属性的错误。

只留下 MessageContract 上的 Stream 参数告诉我,WebScriptEnablingBehavior 的 MessageContracts 不支持 Streams。

有什么想法吗?

【问题讨论】:

    标签: wcf json .net-3.5 configuration


    【解决方案1】:

    解决办法是:

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

    还有一些需要注意的事项:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多