コンソールアプリケーションでホストされているssl/https Webサービスを作成しました。Silverlightでwcfのセキュリティ保護された自己ホストサービスを使用する
127.0.0.1:8741私は証明書を追加しました。私はエンドポイントとしてhttps://127.0.0.1:8741/MagazinService/を使用します。私は、Visual Studio Web Development ServerをSilverlight 4クライアントに使用しています。また、WebサービスをホストするコンソールアプリケーションはVisual Studioから起動されます。私はIISをまったく使用しません。私は正常にSilverlightクライアントにサービス参照を追加しましたが、サーバーから操作を呼び出すと、クロスドメインエラーが発生します。
私はclientaccesspolicy.xmlとcrossdomain.xmlについて読んで、このファイルをソリューション全体で追加しても機能しません。
私は立ち往生しています!助けてください!
コンソールアプリケーション(サーバ/ホスト)でapp.configを::
<system.serviceModel>
<services>
<service behaviorConfiguration="MagazinServiceBehavior" name="SOAP.MagazinVirtual">
<endpoint address="" binding="customBinding" bindingConfiguration="MagazinServiceBinding" contract="SOAP.IMagazinVirtual">
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://127.0.0.1:8741/MagazinService/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<customBinding>
<!-- buffer: 64KB; max size: 64MB -->
<binding name="MagazinServiceBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<security authenticationMode="UserNameOverTransport" />
<binaryMessageEncoding>
</binaryMessageEncoding>
<httpsTransport>
</httpsTransport>
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MagazinServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SOAP.Validator, SOAP" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
ここ
ServiceReferences.ClientConfig
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_IMagazinVirtual">
<security authenticationMode="UserNameOverTransport" includeTimestamp="true">
<secureConversationBootstrap />
</security>
<binaryMessageEncoding />
<httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://127.0.0.1:8741/MagazinService/" binding="customBinding"
bindingConfiguration="CustomBinding_IMagazinVirtual" contract="ServiceReference.IMagazinVirtual"
name="CustomBinding_IMagazinVirtual" />
</client>
</system.serviceModel>
ここで私が使用するコードです
Silverlight Webプロジェクトのコードは次のとおりです。Web.config:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_IMagazinVirtual">
<security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport"
requireDerivedKeys="true" securityHeaderLayout="Strict" includeTimestamp="true"
keyEntropyMode="CombinedEntropy" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings cacheCookies="true" detectReplays="false"
replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite"
replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" />
<localServiceSettings detectReplays="false" issuedCookieLifetime="10:00:00"
maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00"
negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00"
sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true" maxPendingSessions="128"
maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
<secureConversationBootstrap />
</security>
<binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
maxSessionSize="2048">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binaryMessageEncoding>
<httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" requireClientCertificate="false" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://127.0.0.1:8741/MagazinService/" binding="customBinding"
bindingConfiguration="CustomBinding_IMagazinVirtual" contract="ServiceReference.IMagazinVirtual"
name="CustomBinding_IMagazinVirtual" />
</client>
</system.serviceModel>
これはclientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://*" />
<domain uri="https://*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
ためのコードであり、これは、私はこれで苦労していたcrossdomain.xml
<?xml version="1.0" encoding="utf-8" ?>
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="SOAPAction" secure="true" />
</cross-domain-policy>
するためのコードで、助けてください!
私はこの新しいサービスを作成しました。私は今何をしなければならないのですか?新しく作成されたサービスを指し示すSilverlightクライアントにサービス参照を追加する必要がありますか? CrossDomainServiceからメソッドを呼び出す必要がありますか?セキュリティ保護された最初のサービスはhttps://127.0.0.1:8741にあり、私が今作成したサービスはhttp:// localhost:8732でリッスンしています。これは大丈夫ですか? – lex87
私は新しい作成されたサービスへの参照を追加しました。今や、完了したイベントは、保護されたサービスからメソッドを呼び出した後に起動されたようですが、私はまだ同じクロスドメイン例外を持っています。私は何が間違っているのか分かりません。 – lex87
何もする必要はありません。彼らは私が思うのと同じポートで走っているはずです。 8741で実行するようにクロスドメインサービスを変更してみてください。 –