在服务器上部署时,无法从clientconfig读取端点

时间:2013-02-13 06:21:37

标签: wcf silverlight

我正在尝试从我的代码中的servicereferences.clientconfig文件读取端点,如下所示:

public BaseRepository()
    {
        _proxy = new MyServiceClient("BasicHttpBinding_IMyService");
        this.binding = (BasicHttpBinding)_proxy.Endpoint.Binding;
        this.endpoint = _proxy.Endpoint.Address;
    }

此处“BasicHttpBinding_IMyService”是Servicereferences.ClientConfig中定义的终端名称。

<configuration>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMyService" maxBufferSize="2147483647"
                maxReceivedMessageSize="2147483647">
                <security mode="Transport" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>

        <endpoint address="https://xxx/myservice.svc?wsdl"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
            contract="IMyserviceContract" name="BasicHttpBinding_IMyService" />
    </client>


</system.serviceModel>

当我在本地运行它时它工作正常但在我在服务器上部署它时不起作用。 我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

我认为您的服务器是Https SSL安全服务器。

如果是这样,你应该通过代码中的一个小修改来解决它。

在你的绑定中有一个 EndpointAdrress ,我记得它上面有一个协议属性,它可以是“http”或<强> “HTTPS”即可。

如果其https,绑定具有 SecurityMode 选项,则应将其设置为SSL使用的传输

对于其他方案,您应该在web.config中打开跟踪

 <configuration>
 <system.diagnostics>
  <sources>
        <source name="System.ServiceModel" 
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
        <listeners>
           <add name="traceListener" 
               type="System.Diagnostics.XmlWriterTraceListener" 
               initializeData= "c:\log\Traces.svclog" />
        </listeners>
     </source>
  </sources>

然后使用 SvcTraceViewer.exe打开您的服务并打开 c:\ log \ Traces.svclog 检查红色日志。

希望有所帮助!

答案 1 :(得分:0)

每当您从配置中读取端点配置时,它将采用您在添加服务引用期间所做的所有默认设置。默认配置包含如下URI,

<binding name="BasicHttpBinding_IWorkbenchService1" maxBufferSize="2147483647"
                maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>

上述配置将本地服务器作为URI,因此只允许它在本地计算机上运行。

如果要将其部署到其他服务器,则需要指定正确的URI来定位服务器,如果在创建代理期间包含以下代码,则可以这样做。

Uri uri = null;
                if (!System.ComponentModel.DesignerProperties.IsInDesignTool)
                {
                    hostName = HtmlPage.Document.DocumentUri.Host;
                    portNo = HtmlPage.Document.DocumentUri.Port;
                    if (hostName == "localhost")
                    {

                        uri = new Uri("http://localhost:2700/xyz.svc");

                    }
                    else
                    {
                        uri = new Uri("http://" + hostName + ":" + portNo.ToString() + "/WebService/xyz.svc");
                    }
                }
                else
                {
                    uri = new Uri("http://localhost:2700/xyz.svc");
                }

                _proxy = new xyzClient(binding, new EndpointAddress(uri));
                _proxy.Endpoint.Binding.CloseTimeout = new TimeSpan(01, 20, 10);
                _proxy.Endpoint.Binding.ReceiveTimeout = new TimeSpan(01, 20, 10);
                _proxy.Endpoint.Binding.SendTimeout = new TimeSpan(01, 20, 10);
                _proxy.Endpoint.Binding.OpenTimeout = new TimeSpan(01, 20, 10);

                return _proxy;
            }

希望这能回答你的问题。