1

Web ソリューションがあり、その中に WCF サービス プロジェクトがあります。「cookieless」をサポートする必要があります。したがって、web.configでは、次のように設定されています

 <sessionState 
    mode="SQLServer"
    sqlConnectionString="Data Source=ds;Initial Catalog=db;User Id=uid;Password=pwd" 
    allowCustomSqlDatabase="true" 
    cookieless="true" 
    timeout="720" 
    regenerateExpiredSessionId="false"/>

WCF サービスはセッションをサポートするため、web.config で "aspNetCompatibilityEnabled" を true に設定しました。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
                           multipleSiteBindingsEnabled="true"/>

サービスとインターフェースは次のとおりです。

[ServiceContract(SessionMode=SessionMode.Allowed)]
public interface ICDOCService
{ }

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CDOCService : ICDOCService
{ }

私たちが直面している問題は、クライアント アプリケーションからサービスにアクセスできないことです。(Web アプリ、WCF テスト クライアント)

WCF テスト クライアント経由でアクセスすると、次のエラーが表示されます。

サービスの呼び出しに失敗しました。考えられる原因: サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシは無効です。詳細については、スタック トレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。

コンテンツ タイプtext/htmlcharset=UTF-8応答メッセージのコンテンツ タイプがバインディングのコンテンツ タイプと一致しません (multipart/related; type="application/xop+xml")。カスタム エンコーダーを使用する場合は、IsContentTypeSupportedメソッドが適切に実装されていることを確認してください。応答の最初の 1024 バイトは次のとおりです。

<HTML>

 <HEAD>

 <link rel="alternate" type="text/xml" href="http://localhost:53721/Services/CDOCService.svc?disco"/>

  <STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; 

  MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; 

  FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 

  12px; 

  COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; 

  PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; 

  PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 

   1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: 

   Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 

   15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 

   3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; 

   FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}
 </STYLE>

<TITLE>CDOCService Service</TITLE></HEAD><BODY><DIV id="content"><P '.



Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at ICDOCService.GetCDOCCount(String institutionID, String mrnID, String userID, String callingSystemID, String securityToken)
   at CDOCServiceClient.GetCDOCCount(String institutionID, String mrnID, String userID, String callingSystemID, String securityToken)
4

1 に答える 1

0

OPに役立つように見えたので、@Jeroenの提案に従って私のコメントを回答として再投稿しました。

相互に排他的な要件があるようです。Cookie を絶対に使用できない場合、Session を使用せずに必要な情報にアクセスできる別の方法はありますか? おそらく永続的なデータ ストア (データベース内のテーブルなど) ですか?

于 2012-10-13T03:31:23.833 に答える