2

我有几个问题可能相关,也可能不相关。我注意到,当我在 Visual Studio 中使用 Add Service Reference 添加对我的数据服务的引用时,它生成的 reference.cs 无法编译。它抱怨缺少命名空间。我可以修复它以进行编译,但是每次我更新引用时都会发生这种情况,并且在其他层面上也令人担忧,例如“这会导致其他问题”。

我还注意到,当我这样做时,我的主机服务器(托管数据服务的控制台应用程序)会记录以下内容:

An exception occurred [System.Data.Services.DataServiceException] :: The URL 
representing the root of the service only supports GET requests.

这是服务配置:

  <service behaviorConfiguration="behaviour" name="StatsPlus.Server.HostedServices.SPDataServiceHost">
    <endpoint address="svc" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8752/DataService/"/>
      </baseAddresses>
    </host>
  </service>

和行为:

    <behavior name="behaviour">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="10"/>
    </behavior>

当我尝试运行时svcutil http://localhost:8752/DataService/,我得到了这个:

HTTP GET Error  
URI: http://localhost:8752/DataService
There was an error downloading 'http://localhost:8752/DataService'.  
The request failed with HTTP status 405: Method Not Allowed.  

有任何想法吗?非常感激

谢谢

4

1 回答 1

2

我认为您连接到错误的地址。你有一个基地址

<add baseAddress="http://localhost:8752/DataService/"/>

最重要的是一个相对端点地址

<endpoint address="svc" binding="webHttpBinding" 

因此您的完整 URL 将是两者的组合:

http://localhost:8752/DataService/svc

您是否尝试在那里连接?

我不确定您是否可以使用 WCF REST 服务拥有一个“mex”元数据交换端点,真的。我的印象是 WCF 数据服务的客户端代理通过来自 HTTP 端点的特殊 URL 调用获取其元数据。因此,也许也可以尝试从您的配置中删除它(我相信您不能svcutil在该服务上使用 - svcutil 仅用于 SOAP 服务调用,如果我没记错的话)。

此外,由于您使用的是webHttpBinding自托管,因此您需要添加以下webHttp行为:

<behavior name="behaviour">
  <serviceMetadata httpGetEnabled="true"/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
  <dataContractSerializer maxItemsInObjectGraph="10"/>
  <webHttp />
</behavior>

如果您执行这两个步骤,我认为您应该能够获得 WCF 数据服务。试试看,让我们知道!

于 2010-02-26T20:52:31.790 回答