我一直在努力解决我在云平台上托管的WCF服务遇到的问题。服务是针对.NET 4.0编写的。我可以使用wsHttpBinding和basicHttpBinding来访问该服务,而不仅仅是普通的http。但是,当我尝试通过https端点访问服务时,它始终给我一个端点未找到异常,这很奇怪,因为在客户端我添加一个指向https端点的服务引用,这应该足以构建一个兼容的代理?
该网站具有SSL证书设置,该设置有效,托管该服务的站点在IIS中具有使用此证书的绑定。我可以从IIS管理单元中浏览到https URL,它可以找到没有问题的服务,并且我可以使用桌面上的相同URL并获得正常的“您已经创建了一个服务页面”。 IIS仅启用匿名身份验证。
对于WCF配置而言,我对此无能为力。
在服务器web.config中我有安全模式的Transport和 客户凭证无(认为我需要这个因为 主机服务上的匿名身份验证)
同样在服务器web.config中我为每个设置了mex端点 已定义的服务器端点。
我还有什么需要做的吗?
在客户端
我创建了一个基本的控制台应用,并创建了一个服务 指向https网址的引用,找到了
在代码中,我实例化代理并调用一个调用的方法 服务。
我在本地IIS上创建了一个非常基本的ASP.NET网站,它提供了一个非常简单的服务。我添加了一个自签名证书,在mmc管理单元中,我将其作为可信证书导入。我已经为安全和非安全设置了一个wsHttp端点,当我创建一个引用该服务的简单客户端时,我在使用https端点时会遇到同样的问题。所以我可以复制我在现场看到的问题环境。
事件查看器没有对任何发生的事情有所了解。在我的各种搜索中,我发现了重新注册asp.net和WCF运行时组件的引用。试过这一切无济于事。变得非常困难。我已经从我当地的asp.net网站和客户端配置中包含了配置,以便人们可以扫描我拥有的内容。关于我还能尝试什么的任何建议都会很棒。我希望我忽略了一些显而易见的事情,即对WCF有更多经验的另一双眼睛可以发现。
提前致谢。
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="500" />
</diagnostics>
<services>
<service name="NorthwindServices.ProductService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/NorthwindServices/ProductService/" />
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="NorthwindServices.IProducts">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Secure">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic">
</transport>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</
==================================================================================
Client config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IProducts">
<security mode="Transport"></security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/Northwind.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IProducts" contract="ProductProxy.IProducts"
name="WSHttpBinding_IProducts">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
答案 0 :(得分:0)
BindingConfiguration是可选的,因为端点主要由地址,绑定和契约组成。如果在绑定下没有定义wsHttpBinding,则将使用默认配置;如果在没有名称或空名称的wsHttpBinding下有一个,如果端点没有声明命名的端点,则将使用绑定配置。并且您可以在wsHttpBinding下具有多个命名绑定配置,并且每个端点可以相应地选择一个。到目前为止,根据您列出的配置文件存在的问题与bindingConfiguration无关,因为它们看起来都很好。但是,服务端的baseAddress和客户端端点地址似乎不匹配,我认为您正在使用svc文件进行服务激活。然后,您需要通过正确的路由确保svc文件位于正确的位置。或者,您可以在不使用svc文件的情况下使用配置激活。