通过Silverlight的https使用WCF服务

时间:2011-11-14 17:43:26

标签: silverlight wcf

我正在尝试这个示例代码: http://www.dotnetcurry.com/ShowArticle.aspx?ID=624

一切似乎都没问题但是当它试图从WCF调用异步方法时它显示了这个异常(抱歉它只是西班牙语):

  

Se ha producido un error al intentar realizar una solicitud al URI   的 'https://samsung/WCF40_SSL_Service/Service.svc'。 Puede在一个un   意图加入了一个不受欢迎的主义者   unapolíticadentredominios adecuada en contexto ounapolíticano   apropiada para servicios SOAP。 Es posible que necesite ponerse en   contacto con el propietario del servicio para publicar un archivo de   políticadentredominios y para asegurarse de que permite enviar   encabezados HTTP relacionados con SOAP。 Esteerrortambiénpuede   deberse al uso de tipos internos en el proxy de servicios web sin   utilizar el atributo InternalsVisibleToAttribute。 Paraobtenermás   información,consultelaexsentpcióninterna。

freetranslation.com的英文翻译(不确定有帮助:)

  

尝试对URI“https://samsung/WCF40_SSL_Service/Service.svc”执行请求时产生错误。由于访问服务的意图   控制中的配置在没有政治的情况下,在上下文中的适当控制或不适当的服务SOAP政治。可能需要与服务的所有者联系以在控件之间发布政治文件并确保允许发送与SOAP相关的标题HTTP。此错误也是由于在不使用属性InternalsVisibleToAttribute的情况下在服务Web代理中使用内部类型。要获取更多信息,请参阅内部例外。

在我看来,这似乎是一个“clientaccesspolicy.xml”问题,但我很确定它没问题,并且已经放在根路径中,在应用程序路径中,它的父...

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

我试图在fiddler中看到应用程序是否正在发送clientaccesspolicy.xml请求,但它不是!它甚至不试图找到文件......

我认为我必须遗漏一些微不足道的东西,但我无法意识到......有什么想法?

提前致谢!!!

服务器配置:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <add  name="SqlSecureConnection" connectionString="Data Source=.;
              Initial Catalog=aspnetdb;Integrated Security=SSPI"/>
    </connectionStrings>
    <system.web>
        <roleManager enabled="true" />
        <authentication mode="Forms" />
        <compilation debug="true" targetFramework="4.0" />

        <membership defaultProvider="MySqlMembershipProvider"  
                    userIsOnlineTimeWindow="15">
            <providers>
                <clear />
                <add
                  name="MySqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider"
                  connectionStringName="SqlSecureConnection"
                  applicationName="/"
                  enablePasswordRetrieval="false"
                  enablePasswordReset="false"
                  requiresQuestionAndAnswer="false"
                  requiresUniqueEmail="true"
                  passwordFormat="Hashed" />
            </providers>
        </membership>
    </system.web>
    <system.serviceModel>
        <services>
            <service name="WCF_SecureService.Service" 
                     behaviorConfiguration="ServBehave">
                <endpoint
                   address=""
                    binding="customBinding"
                    bindingConfiguration="custBind"
                    contract="WCF_SecureService.IService">
                </endpoint>
            </service>
        </services>
        <bindings>
      <customBinding>
        <binding name="custBind">
          <security authenticationMode="UserNameOverTransport"></security>
          <httpsTransport></httpsTransport>
        </binding>
      </customBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior  name="ServBehave">
                    <serviceMetadata  httpsGetEnabled="True"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                    <serviceCredentials>
                        <userNameAuthentication
                           userNamePasswordValidationMode="MembershipProvider" 
                    membershipProviderName="MySqlMembershipProvider"/>
                    </serviceCredentials>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>  
</configuration>

客户端配置:

<configuration>
<system.serviceModel>
<bindings>
    <customBinding>
        <binding name="CustomBinding_IService">
            <security authenticationMode="UserNameOverTransport" 
                        includeTimestamp="true">
                <secureConversationBootstrap />
            </security>
            <textMessageEncoding messageVersion="Default" 
                                    writeEncoding="utf-8" />
            <httpsTransport maxReceivedMessageSize="2147483647" 
                            maxBufferSize="2147483647" />
        </binding>
    </customBinding>
</bindings>
<client>
    <endpoint 
        address="https://samsung/WCF40_SSL_Service/Service.svc"
        binding="customBinding" bindingConfiguration="CustomBinding_IService"
        contract="MyRef.IService" name="CustomBinding_IService" />
</client>

</system.serviceModel>

</configuration>

2 个答案:

答案 0 :(得分:2)

一种可能性是它与SSL证书有关。

看起来你正在对开发机器运行https。这里可能存在的问题是:

  • 您尚未安装SSL证书
  • 您已安装自签名SSL证书但客户端不信任

答案 1 :(得分:0)

在浏览器中打开此网址时,您看到了什么? https://samsung/WCF40_SSL_Service/Service.svc