【问题标题】:WCF-Ajax enabled Web service. Service is not defined when deployed启用 WCF-Ajax 的 Web 服务。部署时未定义服务
【发布时间】:2011-12-21 11:06:50
【问题描述】:

我的网站中有一个启用 Ajax 的 Web 服务。

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

我已将 Web 服务添加到母版页中的脚本管理器,并使用 JQuery 在页面内调用该服务。

在 IIS 7 (Vista) 中本地运行一切正常。

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

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

我在谷歌上搜索了很多关于这个主题的内容,虽然有很多建议的 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>

【问题讨论】:

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

标签: c# ajax wcf json


【解决方案1】:

我已经设法找到了问题。

归结为修补。以下文章提到了修复 IIS 7.5 和 Windows 7 中的问题的更新,但该补丁也适用于 Vista 和 Windows Server 2008。

http://support.microsoft.com/kb/2520479

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

第二个选项在上面的文章中有所描述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多