首页 > 解决方案 > 从显示 ServiceName 未定义的 javascript 调用 WCF 后

问题描述

在我的本地系统中,一切正常。当我部署到服务器时问题就开始了。尝试了很多事情都没有运气。任何帮助将不胜感激。

在此处输入图像描述

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
            <Services>
                <asp:ServiceReference Path="~/Services/WebChatWCFService.svc" />
            </Services>
        </asp:ScriptManager>

WebChatWCFService.ClientRecieveMessage(vSno, TokenNo, UpdateMessageSuccessCallBack, UpdateMessageFaileCallBack);

错误是:未定义 WebChatWCFService

这是我的 webconfig 部分:

<behaviors>
  <endpointBehaviors>
    <behavior name="WebChatWCFServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="Ileverage2k10.Services.WebChatWCFServiceAspNetAjaxBehavior">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service name="Ileverage2k10.Services.WebChatWCFService" behaviorConfiguration="Ileverage2k10.Services.WebChatWCFServiceAspNetAjaxBehavior">
    <endpoint address="" behaviorConfiguration="WebChatWCFServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="Ileverage2k10.Services.WebChatWCFService" />
  </service>
</services>

在我的 WCF 中:命名空间:Ileverage2k10.Services

 [ServiceContract(Namespace = "",
            SessionMode = SessionMode.Allowed)]
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class WebChatWCFService
        {
             [OperationContract]
            public List<DClientTempDataContract> ClientRecieveMessage(int vSno, int vTokenNo)
            {
                List<DClientTempDataContract> result = new List<DClientTempDataContract>();

                List<dclienttemp> messageList =
                    LinqClinetFilter.ClientReceiveMessage(vSno, vTokenNo);

                foreach (dclienttemp msg in messageList)
                {
                    result.Add(new DClientTempDataContract(msg));
                }

                return result;

            }
}

标签: javascriptasp.netwcf

解决方案


此问题是由于 IIS 中的无扩展 URL 处理程序导致 Web 服务无法识别。
请参考以下链接中的解决方案。
https://support.microsoft.com/zh-cn/help/2520479/web-services-may-fail-on-microsoft-internet-information-services-iis-7
另外,这个问题还有一个变通方法。我们可以在 ScriptManager 控件中注册服务时使用完整的 URL 替换相对地址。

<asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="http://localhost:56697/Content/CostService.svc" />
            </Services>
        </asp:ScriptManager>

如果有什么我可以帮忙的,请随时告诉我。


推荐阅读