C# 支持WCF Ajax的Web服务。部署时未定义服务

C# 支持WCF Ajax的Web服务。部署时未定义服务,c#,ajax,wcf,json,C#,Ajax,Wcf,Json,我的网站中有一个支持Ajax的web服务 该服务位于网站根目录下的WebServices文件夹中,该文件夹还包含它自己的Web.config(因为ajaxweb.config的绑定与我网站另一层上的配置冲突) 我已将web服务添加到母版页中的scriptmanager中,并使用JQuery在页面内调用该服务 在IIS 7(Vista)中本地运行时,这些都可以正常工作 但是,当我发布网站(本地到文件系统,因为我们必须手动将文件复制到我们的测试环境)然后将文件复制到我们的测试环境(在Windows

我的网站中有一个支持Ajax的web服务

该服务位于网站根目录下的WebServices文件夹中,该文件夹还包含它自己的Web.config(因为ajaxweb.config的绑定与我网站另一层上的配置冲突)

我已将web服务添加到母版页中的scriptmanager中,并使用JQuery在页面内调用该服务

在IIS 7(Vista)中本地运行时,这些都可以正常工作

但是,当我发布网站(本地到文件系统,因为我们必须手动将文件复制到我们的测试环境)然后将文件复制到我们的测试环境(在Windows Server 2008 R2上运行IIs 7.5)时,web服务不起作用,我收到一个Javascript错误,说“服务未定义”

如果我浏览到服务,那么我可以毫无问题地查看wsdl,但是如果我尝试查看service.svc/js(页面正在查找的同一url),那么我会收到404未找到错误

我在谷歌上搜索了很多关于这个主题的内容,虽然有很多建议的Web.config补丁,但我尝试了多种组合,到目前为止似乎没有任何效果

它自己的服务很基本

[ServiceContract(Namespace = "MyService")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class MyService
{
    [OperationContract]
    public JSONObject DoWork()
    {
     ...Do some logic
     return JSONObject;
    }
}
JSONObject是我创建的一个类,它只保存一些要发送到页面的属性。正如我所说的,这些都是在IIS本地托管的

——编辑

以下是与Web服务位于同一目录中的Web.Config:

<?xml version="1.0"?>
 <configuration>
  <system.serviceModel>
   <bindings>
     <webHttpBinding>
       <binding name="default" />
     </webHttpBinding>
   </bindings>
  <services>
    <service name="MyWebsite.WebServices.MyService"
           behaviorConfiguration="MyWebsite.WebServices.MyServiceBehavior" >
      <endpoint address=""  behaviorConfiguration="MyWebsite.WebServices.MyServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="MyWebsite.WebServices.MyService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyWebsite.WebServices.MyServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
  </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="MyWebsite.WebServices.MyServiceAspNetAjaxBehavior">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
  </behaviors>
 </system.serviceModel>
</configuration>

我的根web.config中还有以下部分:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

我已经设法找到了问题所在

归根结底是修补。下面的文章提到了修复IIS 7.5和Windows 7中问题的更新,但该修补程序也适用于Vista和Windows Server 2008

还有第二种方法可以解决这个问题,它涉及在受影响的机器上重新排序IIS applicationHost.config文件中的处理程序,我已经尝试过了,它确实解决了这个问题


第二个选项在上面的文章中进行了描述。

您可以在web.config中发布您的配置吗?您看到了不同部署之间的区别吗?目标服务器上包含服务的文件夹是否为有效的虚拟目录或应用程序?您是否使用相同版本的.NET framework等。Webservice文件夹只是网站应用程序根目录中的一个文件夹。NET的版本是相同的,唯一的主要区别是一个是Vista上的IIS 7,另一个是Server 2008 R2上的IIS 7.5。