如何使用HTTP Get的WCF服务(在Visual Studio 2010中)

时间:2010-11-25 17:13:26

标签: wcf wcf-binding wcf-http

我们尝试使用非常简单的WCF服务和HTTp Get,但我们无法使用它。 我们已经遵循了这些“指南”,但它不起作用

当我们使用以下网址调用我们的服务时,我们会收到找不到网页的错误:

  

http://localhost:9999/Service1.svc/GetData/ABC

基本网址(http:// localhost:9999 / Service1.svc)运行正常,并正确返回wcf服务信息页。

这些是重现我们的例子的步骤和代码。

  1. 在Visual Studio 2010中,创建新的“WCF服务应用程序”项目
  2. 用此代码替换IService接口

      [ServiceContract()]
      public interface IService1
      {
          [OperationContract()]
          [WebInvoke(Method = "GET", 
                     BodyStyle = WebMessageBodyStyle.Bare, 
                     UriTemplate = "GetData/{value}")]
          string GetData(string value);
      }
    
  3. 使用此代码替换Service类

    public class Service1 : IService1
    {
        public string GetData(string value)
        {
            return string.Format("You entered: {0}", value);
        }
    }
    
  4. web.config看起来像这样          

    <system.web>
       <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
      <services>
          <service name="Service1">
              <endpoint address="" binding="webHttpBinding" contract="IService1" behaviorConfiguration="WebBehavior1">
              </endpoint>
          </service>
      </services>
      <behaviors>
          <endpointBehaviors>
              <behavior name="WebBehavior1">
                 <webHttp helpEnabled="True"/>
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
    

         

  5. 按“运行”并尝试调用“获取方法”
  6. 如果有人得到这个或类似的工作,如果你能回复有关工作示例的信息,那将非常友好。

    非常感谢

1 个答案:

答案 0 :(得分:1)

我重新创建了你的样本 - 就像一个魅力。

有一点:您的服务合同(public interface IService1)和服务实现(public class Service1 : IService1)是否存在于.NET命名空间内?

如果是这样,您需要更改* .svc和web.config以包含:

<services>
      <service name="Namespace.Service1">
          <endpoint address="" binding="webHttpBinding" 
                    contract="Namespace.IService1" 
                    behaviorConfiguration="WebBehavior1">
          </endpoint>
      </service>
  </services>

<service name="...">属性和<endpoint contract="...">必须包含.NET命名空间才能生效。