Rest Wcf服务

4
我正在尝试从浏览器测试我的Rest Wcf服务。当我尝试从浏览器发送一些值时,我会收到以下错误信息:“由于终结点分派程序处的地址筛选器不匹配,因此无法处理该消息。
请检查发件人和收件人的终结点地址是否一致。”
然后我添加了[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)],然后我又遇到了不同的错误信息:“由于终结点分派程序处的合同筛选器不匹配,可能是由于发件人和收件人之间的合同不匹配(发件人和收件人之间的操作不匹配)或者发件人和收件人之间的绑定/安全性不匹配。
请确保发件人和收件人具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。 ”
我们能从浏览器向Rest Wcf服务传递值吗?我正在尝试从浏览器传递以下值。
http://mywebsite/Service1.svc/mymethod/Firstname,Lastname,LosAngles,CA

这是我的web.confg文件。
<system.serviceModel>
    <services>              
      <service behaviorConfiguration="Wcfservice1.ServiceBehavior" name="="Wcfservice1.Service1">
        <endpoint address="" binding="webHttpBinding" contract="Wcfservice1.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>    
    <behaviors>
      <serviceBehaviors>        
        <behavior name="Wcfservice1.ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>    
  </system.serviceModel>

1
我在你的配置中找不到<webHttp/>端点行为。除非你在Service1.svc文件中指定了“WebServiceHostFactory”,否则它会缺失,甚至可能导致你遇到的错误。 - mthierba
真的吗?我在哪里添加<webHttp/>标签?无论web.config中的代码是由VS2008生成的。我是WCF的新手。你能给我提供一些代码吗?感谢你的帮助。 - Henry
<behaviors><endpointBehaviors><behavior name="REST"><webHttp/></behavior></endpointBehaviors></behaviors>。你需要从你的端点链接到该行为:<endpoint address="" behaviorConfiguration="REST" binding="webHttpBinding" contract="..." />。 - carlosfigueira
你好,感谢你的帮助。看起来错误问题已经解决了。但是现在我遇到了“方法不允许”的对话框。但我的方法只有POST,它将数据发送到WCF,然后WCF将数据保存到数据库中。为什么会出现这个错误呢? - Henry
1个回答

8

看起来你没有在REST端点上启用<webHttp/>行为。在你的配置文件中,在<behaviors/>元素中添加此行:

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

然后,将<endpoint/>元素更改为以下内容:

<endpoint address="" binding="webHttpBinding" behaviorConfiguration="REST" contract="Wcfservice1.IService1">

你在服务操作上加了 [WebInvoke] 属性吗?在这里可以找到有关编写 WCF 3.5 REST 服务的简介(你是用的 VS 2008,对吧?):http://msdn.microsoft.com/zh-cn/library/bb412178(v=VS.90).aspx - mthierba
你是在浏览器中调用它,对吧?那么请求将会是 GET 而不是 POST!抱歉,之前漏掉了这一点。 - mthierba
我没听懂你的意思。你的意思是我不能从浏览器调用Post方法吗?那么我从哪里调用呢? - Henry
如果您在浏览器地址栏中输入像您问题中的那样的URL并导航到它,请求将始终为HTTP GET。这就是浏览器的工作原理。您可以通过(1)在HTML页面上使用带有提交按钮的<form>、(2)在JavaScript中使用jQuery的$.post()函数或者(3)使用.Net WCF REST客户端应用程序(只是其中几个例子)来发送POST请求。如果您仍然想要使用浏览器,则可以在服务实现中将[WebInvoke]替换为[WebGet]或将Method="POST"替换为Method="GET" - mthierba
我能用Fiddler来测试吗?URL应该是什么?我想对于Fiddler,您需要在URL前面添加一些“ipv4.fiddler”,但我不确定。感谢您的时间。 - Henry
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接