简单的WCF服务 - 所有请求返回空?

时间:2011-12-12 12:21:00

标签: c# wcf

根据http://msdn.microsoft.com/en-us/library/bb412178.aspx的教程

,我目前无法测试应用了WebGet属性的简单WCF服务

我创建了一个空白的ASP.NET Web应用程序项目,然后我添加了一个名为“test”的WCF服务,它创建了test.svcItest.svc

然后我添加了'hello'方法:

public class test : Itest
{
    public string hello(string s){return "hello " + s;}
}

实现接口:

[ServiceContract]
public interface Itest
{
    [OperationContract]
    [WebGet]
    string hello(string s);
}

但是,http://localhost/test.svc/hello?s=hi的任何请求(HTTP GET)都会返回空页。 事实上,该网址下的任何请求都会返回一个空白页面(即http://localhost/test.svc/abcdefg

我错过了一些基本的东西吗?

编辑:web.config完全标准,除了Visual studio生成:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_Itest" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/test.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_Itest" contract="ServiceReference1.Itest"
        name="BasicHttpBinding_Itest" />
    </client>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

3 个答案:

答案 0 :(得分:2)

您应该使用webHttpBinding代替basicHttpBinding 以下是答案的一部分:testing wcf service in browser

  

这取决于您拥有的WCF服务类型:

     

如果您正在使用WCF REST服务(webHttpBinding),那么您应该能够只导航到服务地址,例如http://yourserver/somedir/service.svc

     

如果您正在使用其他任何东西,那么您就拥有了SOAP服务,并且您无法在Web浏览器中测试SOAP服务 - 浏览器只是不理解和使用SOAP。但是,在C:\驱动器中有一个WCF测试客户端应用程序可用于此目的。

从我自己可以添加WCFTestCLient在这里:&#34; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ WcfTestClient.exe&#34;

答案 1 :(得分:1)

尝试使用以下内容替换web.config中的上述部分:

    <system.serviceModel>    
    <services>
      <service name="ServiceReference1.test">
      <endpoint binding="webHttpBinding" contract="ServiceReference1.Itest" behaviorConfiguration="web"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

您的服务器需要在web.config中包含services元素而不是client元素,如上所示。另外要使用webGet,您需要使用webHttpBinding

答案 2 :(得分:0)