0

我正在尝试从我的代码中的 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>

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

4

2 回答 2

0

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

如果是这样,您应该通过对代码进行小的修改来解决它。

在您的绑定中有一个EndpointAdrress,我记得上面有一个Protocol属性,它可以是"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 检查红色日志。

希望有所帮助!

于 2013-02-13T06:49:05.537 回答
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;
            }

希望这能回答你的问题。

于 2013-02-14T09:13:50.277 回答