我正在开发一个使用 WCF 服务的项目。我已经构建了服务,配置了 web.config 文件,并将其部署在 IIS 7 服务器上。该服务是通过 HTTPS 访问的(在我的开发机器上,我已经自行创建了证书)。在 Visual Studio 2010 中创建 ServiceReference 时一切都很好,它会创建客户端并且工作正常。
我需要的是以编程方式创建一个客户端(需要一点灵活性),所以当我尝试“手动”连接时,它给了我这样的错误:
提供的 URI 方案“https”无效;预期的“http”。参数名称:via
web.config 的代码是:(我希望它没有错)
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="WcfService1.IService1" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfService1.Service1Behavior">
<serviceMetadata httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
我编写的访问 WCF 服务的过程是:
void proc()
{
string ADRESASSL = "https://localhost/ServiciuSSLwsBind/Service1.svc";
WSHttpBinding bind= new WSHttpBinding();
EndpointAddress ea = new EndpointAddress(ADRESASSL);
var myChannelFactory = new ChannelFactory<IService1>(bind, ea);
IService1 client = null;
try
{
client = myChannelFactory.CreateChannel();
client.RunMethod1();
client.Close();
//((ICommunicationObject)client).Close();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
if (client != null)
client.Close();
}
}
IService1 的代码
[ServiceContract]
public interface IService1 : IClientChannel
{
[OperationContract]
int RunMethod1();
//....................................
}
看来我在这里做错了,该程序引发了我提到的异常。我必须做更多的事情才能工作,但我没有弄清楚。
提前感谢您能给我的任何建议。