Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS承载的WCF服务返回HTTP 400错误请求_C#_Asp.net_Wcf_Iis - Fatal编程技术网

C# IIS承载的WCF服务返回HTTP 400错误请求

C# IIS承载的WCF服务返回HTTP 400错误请求,c#,asp.net,wcf,iis,C#,Asp.net,Wcf,Iis,我已经找了几个小时了,但我找不到解决办法。我会简单解释 我正在学习WCF服务。我刚刚创建了一个服务并浏览了它。以下是配置文件: <?xml version="1.0"?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="EmployeeServiceBehaviour"&

我已经找了几个小时了,但我找不到解决办法。我会简单解释

我正在学习WCF服务。我刚刚创建了一个服务并浏览了它。以下是配置文件:

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="EmployeeServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
        <endpoint address="http://localhost:2005/EmployeeService.svc" binding="basicHttpBinding"
          bindingConfiguration="" contract="IEmployeeConfiguration" />
      </service>
    </services>
  </system.serviceModel>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

从VisualStudio浏览时,似乎没有问题。它工作得很好

第二,我试图在IIS上发布它。我现在做的是:

我将服务发布到文件夹,并将此服务添加到IIS

我选择端口3006作为端口

下面是它的配置文件。注意,我还将配置中的端口更改为3006

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="EmployeeServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
        <endpoint address="http://localhost:3006/EmployeeService.svc" binding="basicHttpBinding"
          bindingConfiguration="" contract="IEmployeeConfiguration" />
      </service>
    </services>
  </system.serviceModel>
  <system.web>
    <compilation/>
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

我正在等待顺利运行,但:

IIS给了我一个来自Chrome的空白页面

来自资源管理器的HTTP 400错误请求

最后,如果我从配置文件中删除地址部分,一切都很好。但另一件令人困惑的事情是,在上述场景(提供的地址)之后,我可以在我的另一台计算机上访问服务。所以,我真的厌倦了寻找为什么这是在一台计算机上工作,而不是在另一台计算机上工作。有人能给我解释一下吗

我知道有点长,但我必须解释清楚。
谢谢

我想这会解决你的问题:

将此终结点添加到您的服务:

<endpoint address="mex" binding="mexHttpBinding" 
    bindingConfiguration="" contract="IMetadataExchange" />

希望这足够了

根据我的搜索,我不应该提供地址

您必须始终使用IIS托管服务的相对端点地址 端点。提供完全限定的端点地址(例如, localhost/MyService.svc)可能会导致 如果终结点地址不指向IIS应用程序,则提供服务 承载公开端点的服务的。使用相对端点 托管服务的地址可以避免这些潜在冲突


这可能会有所帮助。我刚刚花了两个多小时试着让它工作。我使用FF及其集合作为默认浏览器

在FF中,它在我的URL末尾添加了一个/

http://services.tester.dev/VehicleFeedService.svc/
它返回了一个
NetworkError:400错误请求

然而,在IE或chrome中,它并没有把/放在末尾,而且工作正常

有一件事需要注意。。即使在FF中,它给了我一个错误的400请求,
?wdsl
也能工作

http://services.tester.dev/VehicleFeedService.svc?wsdl

似乎是/导致了问题

您可以尝试fiddler,也可以尝试svcTracer,它可以为您提供大量调试信息。您还可以在服务器上使用
includeExceptionDetailInFaults=true
标志,但重要的是要标记将此信息发送到客户端并不总是正确的特别是如果客户是外部实体。下面是如何使用它的提示

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

....
....

调试愉快:)

我遇到了同样的问题,我解决了它。那是很久以前的事了,但是如果没有人回答你的话,我可以找到文件:)@Alireza谢谢。如果你现在提供给我,我将不胜感激。因为我在任何地方都找不到答案,你很可能很快就会忘记这个问题:)不,我不会。不要让我保持清醒来寻找解决方案;-)现在是凌晨2点,我在这里sleepy@Alireza好啊现在睡觉:)如果没有人回答,我就等着你的消息!我认为这不仅仅是一项服务。你能添加一个简单的ASPX页面并将其发布到这个新网站上,然后看看你是否能浏览该页面吗?谢谢,我会尝试一下。我有两台电脑,一台在工作,一台在家。请注意,如果我删除了地址部分,我可以浏览这两个部分。若我提供只能在工作电脑上浏览的地址,家庭电脑会在我的问题中给出上述答案。所以,我怀疑像IIS设置这样的问题。我们今晚将解决它:)我希望如此,谢谢。我正在IIsYeah上搜索HTTP 400错误,我只是在寻找它。它不起作用。但根据我的搜索,我不应该提供地址。说明:必须始终为IIS承载的服务端点使用相对端点地址。如果提供完全限定的端点地址(例如)不指向承载公开端点的服务的IIS应用程序,则在部署服务时可能会导致错误。为托管服务使用相对端点地址可以避免这些潜在冲突。我不知道为什么这对我的一台计算机有效,而对另一台计算机无效,但我认为最好不要提供地址,这样对两台计算机都有效。谢谢你帮助Alireza
<serviceBehaviors>
    <behavior name="ServiceBehavior">
    ....
        <serviceDebug includeExceptionDetailInFaults="true" />
    ....
    </behavior>
</serviceBehaviors>