none
Silverlight 4.0 更新 WebService引用报错。 RRS feed

  • 问题

  • 我有个Silverlight项目,调用WebService和服务器通讯,目前项目已经成功上线。最近有些业务需要修改,需要更新服务引用,然而在更新服务引用时候,偶尔会在系统事件日志记录如下日志:

    WebHost 无法处理请求。
     发件人信息: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/24702184
     异常: System.Web.HttpException (0x80004005): 服务“/PMF2.0/WebServices/VIPTicketsService.asmx/_vti_bin/ListData.svc”不存在。 ---> System.ServiceModel.EndpointNotFoundException: 服务“/PMF2.0/WebServices/VIPTicketsService.asmx/_vti_bin/ListData.svc”不存在。
       在 System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
       在 System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)
       在 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
       在 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
       在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
       在 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result)
     进程名称: WebDev.WebServer40
     进程 ID: 4572

    事实上,我的服务正确路径是/PMF2.0/WebServices/VIPTicketsService.asmx,没有后面部分/_vti_bin/ListData.svc。该服务代码版本还是上次成功部署的版本,没有任何修改,仅仅是更新服务引用就出现这个错误。而且此服务也不是每次都出现。

    当然,此事件日志,并没造成代码编译出现问题,只是在后续调用服务时候,会出现以下异常:

    错误信息为

    “client.CookieContainer”引发了“System.ServiceModel.CommunicationObjectFaultedException”类型的异常

    堆栈信息为

       位于 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposed()
        位于 System.ServiceModel.ChannelFactory.EnsureOpened()
        位于 System.ServiceModel.ClientBase`1.ChannelBase`1..ctor(ClientBase`1 client)
        位于 Intl.Modules.VIPTickets.VIPTicketsSvcRef.VIPTicketsServiceSoapClient.VIPTicketsServiceSoapClientChannel..ctor(ClientBase`1 client)
        位于 Intl.Modules.VIPTickets.VIPTicketsSvcRef.VIPTicketsServiceSoapClient.CreateChannel()
        位于 System.ServiceModel.ClientBase`1.get_Channel()
        位于 System.ServiceModel.ClientBase`1.get_InnerChannel()
        位于 Intl.Modules.VIPTickets.VIPTicketsSvcRef.VIPTicketsServiceSoapClient.get_CookieContainer()

    此WebService服务能正常访问,启用的协议为

          <protocols>
            <add name="HttpSoap"/>
            <add name="HttpPost"/>
            <add name="HttpGet"/>
            <add name="Documentation"/>
          </protocols>

    调用服务的源码为

            public static VIPTicketsSvcRef.VIPTicketsServiceSoapClient CreateVIPTicketsSvcSoapProxy()
            {
                System.ServiceModel.Channels.Binding binding = new System.ServiceModel.BasicHttpBinding();
                (binding as BasicHttpBinding).MaxBufferSize = 2147483647;
                (binding as BasicHttpBinding).MaxReceivedMessageSize = 2147483647;
                var client = new VIPTicketsServiceSoapClient(binding,
                     new EndpointAddress(HostUrl + "WebServices/VIPTicketsService.asmx"));
                return client;
            }

    在Debug时候,EndpointAddress所引用的url是正确且可以访问的。

    求教大神,帮忙分析下原因!

    2014年7月16日 8:13

答案

  • 经过尝试,结果发现就是WebService启用的协议有问题。

    <protocols>
            <add name="HttpSoap"/>
            <add name="HttpPost"/>
            <add name="HttpGet"/>
            <add name="Documentation"/>
    </protocols>

    这段在Web.Config中的代码,注释掉之后服务引用就正常了。

    2014年7月22日 9:17

全部回复