2

我正在尝试构建我的第一个 WCF 服务。我现在有以下行为。

  1. 当我运行我的 WCF 服务时,我可以发送输入并在测试客户端中获得正确的结果。
  2. 当我输入http://localhost:12345/Service1.svcChrome 时,我得到一个页面。
  3. 单击svcutil.exe http://localhost:12345/Service1.svc?wsdl会给我一个 XML。

但是,当我输入http://localhost:12345/Service1.svc/test/13时,我只得到一个空响应。里面什么都没有,只有<body>一个<pre>. 我做错了什么,我该如何解决?(请记住,我是这方面的新手。)一旦我的行为按照我想要的方式工作(这样我就可以在浏览器中看到正确的结果),我将在 XML 中生成 REST 或 JSON 数据格式(如果这很重要)。

这个讨论中我得到了这个。

namespace WcfService1
{
  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    [WebGet(UriTemplate = "/test/{indata}", 
      ResponseFormat = WebMessageFormat.Xml)]
    String Ping(String indata);
  }
}

从这个问题中可以看出,我的实现如下。

namespace WcfService1
{
  public class Service1 : IService1
  {
    public string Ping(String indata)
    {
      return "Pong " + indata;
    }
  }
}

建议的web.config不起作用,因此我尝试使用本文中的指针结合此讨论来发布元数据(无论是什么) 。我的配置文件看起来与后一个链接中的配置文件非常相似(除了我删除了诊断部分)。

4

3 回答 3

1

我相信 WCF 测试客户端在 SOAP 上运行。它更多地测试了你正在服务的事实,而不是你正在服务你想要得到的东西。

根据我的经验,您得到的空体只是一条错误消息。但是,在某些情况下,例如跨域调用(不确定它是否是正确的名称,也不确定是否是可能问题的完整列表),当您在 JavaScript 中使用例如XDomainRequest对象(而不是通常的XmlHttpRequest)时,响应为空是错误消息的结果。

您是否尝试检查状态码?它是 200 OK 还是更大的东西?

我相信您已经在 Social MSDN 上提出了类似的问题,并且对于如何形成代码存在一些困惑。让我回顾一下下面的亮点。

网页配置

<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.serviceModel>
    <services>
      ...
    </services>
    <behaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

services - 描述服务性质的标签内容

<service name="DemoRest.RestService" 
         behaviorConfiguration="ServiceBehavior">
  <endpoint address="" binding="webHttpBinding" 
            contract="DemoRest.IRestService" 
            behaviorConfiguration="web"></endpoint>
</service>

行为- 描述服务和端点行为的标签内容

<serviceBehaviors>
  <behavior name="ServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true"/>
  </behavior>
</serviceBehaviors>

<endpointBehaviors>
  <behavior name="web">
    <webHttp/>
  </behavior>
</endpointBehaviors>

现在可以使用以下 URL 检索响应。

localhost/Service1.svc/inputData
于 2012-12-12T20:22:34.440 回答
0

您可以尝试以下操作:

  1. 使用 ServiceBehaviour 属性标记服务实现

    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
    public class Service1 : IService1
    
  2. 在 web.config 中添加/修改以下保留现有数据:

    <services>
      <service name="WcfService1.Service1">
        <endpoint binding="webHttpBinding" contract="WcfService1.IService1" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
     ...
    </behaviors>
    

这些步骤使其工作。

于 2012-12-06T19:57:54.893 回答
0

要使用dot net framework 4 简化配置让 REST 工作,您的 web.config 需要包含以下内容:

<system.serviceModel>
  <!-- 1) Specify webHttp as an endpoint behavior -->
  <behaviors>
    <endpointBehaviors>
      <behavior >
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <!-- 2) Setup a protocol mapping to allow the service to be accessed via webHttp-->
  <protocolMapping>
    <add scheme="http" binding="webHttpBinding"/>
  </protocolMapping>
</system.serviceModel>

要在浏览器中获取没有所有 xml 的输出,请添加以下内容:

<!-- Configure the webHttp standard endpoint -->
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" />
  </webHttpEndpoint>
</standardEndpoints>

要允许访问服务元数据(需要轻松创建代理),请将其添加到行为元素中:

 <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
 </serviceBehaviors>

我个人更喜欢旧式配置,您可以在其中显式配置端点,如下所示:

 <system.serviceModel>
  <services>
    <service name="WcfService1.Service1">
      <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1"  behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp automaticFormatSelectionEnabled="true"/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

最后,您可以使用WCF 服务配置编辑器使用 gui 进行配置。您可以在 Visual Studio 的工具菜单中找到它。打开后,使用它打开项目的 web.config 并开始编辑。

于 2012-12-08T18:22:39.193 回答