2010-02-01 68 views
2

我有一个WCF服务自我托管在一个windows服务环境,可以正常工作在http;通过https,我无法在运行Silverlight应用程序时看到Windows登录提示(或者只是在IE中打开页面)而无法访问一个URL。我正在使用IPolicyRetriever接口来确保为Silverlight应用程序找到ClientAccessPolicy.xml文件。这工作正常。WCF安全 - 如何让所有的呼叫者到这个网址?

有问题的服务有定义的两个端点:

<service behaviorConfiguration="defaultBehavior" name="WCFServices.Scheduler"> 
<endpoint address="WCFServices/Scheduler/" binding="wsHttpBinding" bindingConfiguration="dBinding" contract="WCFServices.IScheduler" /> 
<endpoint address="" binding="webHttpBinding" contract="WCFServices.IPolicyRetriever" behaviorConfiguration="PolicyBehavior" bindingConfiguration="dBinding" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://myservername.org/" /> 
     </baseAddresses> 
    </host> 
    </service> 

如果我去https://myservername.org/我看到测试服务前端(带有链接到WSDL)。这暴露了Silverlight应用程序用来下拉策略文件的根IPolicyRetriever实例。我可以在没有任何登录提示的情况下加载公开WCF服务的此URL和其他URL。但是,如果我在IE 8中使用https://myservername.org/WCFServices/Scheduler/,我会迎接Windows登录。如果我重置服务和客户端上的安全设置以使用http,则可以在没有登录提示的情况下转到后一个网址,并且Silverlight应用按预期工作。我怀疑这与这个WCF服务是唯一一个有两个端点定义的服务有关(这个Windows服务托管了另外5个WCF服务,所有这些服务都只定义了一个端点)。我是否缺少一些授权规则?我不明白这是怎么回事,因为所有其他服务都没有提示加载。

我将不胜感激任何帮助。我需要完整的https://myservername.org/WCFServices/Scheduler/才能提供WCF服务,而不需要登录。感谢您抽时间阅读。

至于安全,我只有这是我的绑定:

<binding name="dBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="6553600"> 
     <security mode="Transport"> 
     </security> 
    </binding> 

回答

0

这个问题加入了这行我的安全绑定解决:

<security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None"/> 
</security> 

...但是,这导致到其他一系列问题,我已经能够处理WCF日志记录。如果在调试WCF服务时遇到NOT FOUND(400)错误,请不要相信它。打开服务器端调试并浏览生成的日志文件 - 你会发现它的底部。

我也应该注意到,我已经找到了第二个端点返回错误请求(400)在Web浏览器中打开时,这是由设计。第一个端点将在其wsdl中列出所有其他端点,并且您仍然可以在代理生成工具中使用它们中的任何端点。如果在尝试直接在浏览器中访问它们时遇到错误的请求错误,请不要担心。