创建WCF服务

时间:2014-06-11 12:07:53

标签: c# wcf

我是WCF的新手。我创建了一个wcf服务应用程序,其中有一个接口和类。

我的界面:

using System.ServiceModel;

namespace WcfService1
{   
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string Display();        
    }    
}

我的课程:

namespace WcfService1
{
    public class Service1 : IService1
    {
        public string Display()
        {
            return "Hello";
        }
    }
}

现在我在浏览器中运行此服务。点击Service1.svc

后会出现以下屏幕

enter image description here

我可以访问浏览器上的Display()吗?

在听完第一个答案之后,接下来就是:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果您想通过浏览器访问它,我认为您正在寻找WebGet。

using System.ServiceModel;
using System.ServiceModel.Web;

namespace WcfService1
{   
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.XML, ResponseFormat = WebMessageFormat.XML, UriTemplate = "/display/")]
        string Display();        
    }    
}

添加这些行为

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp />
    </behavior>
  </endpointBehaviors>
</behaviors>

添加此端点地址

  <service behaviorConfiguration="ServiceBehaviour" name="WCFService1.Service1">
      <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"
      bindingConfiguration="b_WebHttpBinding" contract="WCFService1.IService1" />
  </service>

添加此绑定

<bindings>
  <webHttpBinding>
    <binding name="b_WebHttpBinding" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Buffered"
        useDefaultWebProxy="true" crossDomainScriptAccessEnabled="true">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
          maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
      </security>
    </binding>
  </webHttpBinding>
</bindings>

现在您应该可以像

一样打电话给您的服务了
http://localhost:22727/Service1.svc/display/

然后它应该以XML格式显示一个字符串(如果你愿意,可以将它改为JSON)

另外,请确保参考以下库

System.ServiceModel.Web
System.Web.Extensions
System.Web.Services
System.Web

http://msdn.microsoft.com/en-us/library/bb412172(v=vs.110).aspx

答案 1 :(得分:0)

将您的解决方案拆分为两个项目:

  • 新项目 - &gt; WCF - &gt; WCF服务库
  • 新项目 - &gt; WCF - &gt; WCF服务应用程序

“服务应用程序”是包含svc端点的Web项目。 “服务库”是包含您的服务的类库。

运行(F5)服务库项目时,Visual Studio将启动WCF测试客户端(WcfTestClient.exe),为您提供测试服务的快速界面。

您的Web项目中的.svc端点没有为您提供内置的测试界面(类似于它在asmx时期的工作方式)。