我有一个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>