IIS上托管的Silverlight Web App上的EndpointNotFound异常

时间:2015-04-29 06:21:25

标签: wcf silverlight

我希望你能再次提出一个我无法解决的问题。

我有一个Silverlight Web应用程序曾经工作,在更改代码,添加一些WCF方法和更新MS-SQL数据库上的表后,它已经停止工作,我无法弄清楚原因。

Web应用程序在默认IIS中托管的Windows 7上运行。

在Visual Studio中运行时,它可以正常工作,但在从网页运行时则不行。

我知道它与Enpdoint有关,但奇怪的是我没有改变任何东西。它从IIS上的同一站点运行。

WCF追踪:

Exception.ServiceModel.EndpointNotFoundException, System.ServiceModel, Version=4.0.0, Culture=neutral, PublicToken=b77a5c561934e089

我不是那么熟悉Silverlight,所以无法弄清楚发生了什么变化或者我发生了什么。

Web.config的一部分:

    <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <bindings>
      <customBinding>
        <binding name="HSCGym.Web.GymRebateService.customBinding0" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00">
          <binaryMessageEncoding/>
          <httpTransport/>
        </binding>
      </customBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    <services>
      <service name="HSCGym.Web.GymRebateService">
        <endpoint address="" binding="customBinding" bindingConfiguration="HSCGym.Web.GymRebateService.customBinding0" contract="HSCGym.Web.GymRebateService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
  </system.serviceModel>

如果我中断并检查EndPoint Uri地址,则显示错误:

http://localhost:8080/rebate/ebate/GymRebateService.svc

关于我做错了什么的想法?

尼尔

1 个答案:

答案 0 :(得分:1)

问题是你没有告诉你的web服务它的终点在哪里,所以它将使用你创建它的那个很可能是localhost。

以下是我用来自动在localhost和服务器之间切换的一些代码,因此在部署时我不必记得这样做

string ServerPath = App.Current.Host.Source.AbsoluteUri.Replace(App.Current.Host.Source.AbsolutePath, "");
        string ServicePath = ServerPath + "/Services/YOURSERVICENAME.svc";

        var myBindings = new BasicHttpBinding();
        myBindings.Security.Mode = BasicHttpSecurityMode.None;
        myBindings.MaxReceivedMessageSize = int.MaxValue;
        var address = new EndpointAddress(ServicePath);

        App.GlobalVars.service = new RIFTRunComparerServiceClient(myBindings,address);