0

我有以下问题。让我描述一下我到目前为止所采取的步骤......

  1. 我在 Visual Studio 中创建了一个新的 WCF 服务应用程序
  2. 然后我通过 Nuget 更新了项目以获取最新的 Web http 库(webapi.dll)
  3. 然后我创建了一个看起来像这样的服务方法

`

[ServiceContract]
public interface IService
{
        [OperationContract]
        [WebInvoke(Method="POST", UriTemplate="{value}")]
        string GetData(int value, Stream inputDocument);
}

`

现在尝试在浏览器中查看我的.svc会导致错误提示“对于操作中的请求 GetData 成为流,操作必须具有类型为 Stream 的单个参数

我知道这是配置问题,我只是不知道web.config中需要更改什么请注意,这似乎是在新的 HTTP 支持之前 WCF 中的常见问题,对此我感到有些惊讶不能使用新的 API 开箱即用。

任何指针?

谢谢

[编辑] 我已经包含了我的配置...

<system.serviceModel>
    <services>
      <service name="MyService.Service" behaviorConfiguration="serviceBehaviour">
        <endpoint behaviorConfiguration="endPointBehaviour" address="" binding="webHttpBinding" contract="MyService.IService"/>
      </service>
    </services>    
    <bindings>
      <webHttpBinding>
        <binding transferMode="Streamed" name="webHttpBinding" />
      </webHttpBinding>
    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="endPointBehaviour">
          <webHttp/>
        </behavior>
      </endpointBehaviors>

      <serviceBehaviors>
        <behavior name="serviceBehaviour">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>    
  </system.serviceModel>
4

2 回答 2

1

您将新的 WCF Web API 内容与旧的 WCF REST 内容混合在一起。看一下HttpHelloResource示例作为如何在 IIS 下运行 Web API 服务的最简单示例,或者查看我的博客文章以获得在控制台中运行的服务的更简单示例。

至于接受流,我认为您最简单的选择是这样的操作:

[ServiceContract]
public interface IService
{
        [OperationContract]
        [WebInvoke(Method="POST", UriTemplate="{value}")]
        string GetData(int value, HttpRequestMessage request);
}

你可以通过做得到流

var stream = request.Content.ContentReadStream
于 2011-05-09T13:56:08.783 回答
0

好的,所以似乎错误消息让我走错了路。我认为错误消息需要更具描述性。基本上我的代码没有任何问题,只是将我的浏览器指向 .svc 文件是没有意义的,因为该服务不是 WCF 服务。我通过继续并通过代码访问服务来了解这一点。它有效。谢谢您的帮助

于 2011-05-09T12:47:39.447 回答