我的网站上有一个支持Ajax的Web服务。
该服务位于网站Root的WebServices文件夹中,该文件夹还包含它自己的Web.config(因为Ajax web.config的绑定与我网站的另一层上的配置冲突)
我已将web服务添加到我的母版页中的scriptmanager,并使用JQuery在页面内调用该服务。
这在IIS 7(Vista)中本地运行良好。
然而,当我发布网站(本地到文件系统,因为我们必须手动将文件复制到我们的测试环境)然后将文件复制到我们的测试环境(在Windows Server 2008 R2上运行IIs 7.5),Web服务没有& #39;工作,我得到一个Javascript错误说'#34;服务未定义"。
如果我浏览到该服务,那么我可以查看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>
答案 0 :(得分:1)
我设法追查这个问题。
归结为修补。以下文章提到了在IIS 7.5和Windows 7中修复此问题的更新,但该修补程序也适用于Vista和Windows Server 2008。
http://support.microsoft.com/kb/2520479
还有第二个选项可以解决问题,包括在受影响的计算机上的IIS applicationHost.config文件中重新排序处理程序,我已经尝试了这个,它确实解决了这个问题。
第二个选项在上面的文章中描述。