1

次のリンクで説明および解決された問題があります

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes- silverlight-calls-to-be-slow.aspx

...ただし、SilverlightではなくJavaScriptを使用しているため、推奨されるソリューション(クライアントHTTPスタックを使用)を使用できません。

POST /PollingWcfServices/ServiceWcf.svc HTTP/1.1
Accept: */*
Content-Length: 564
Content-Type: application/soap+xml; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: foo
Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=iyr4sf55rm1kypafjdvlhm55

次のポーリングコードが使用されます

  request.onreadystatechange = function () {
            if (request.readyState == 4) {
                if (request.status == 200)
                    //Process and Poll again
                else
                    //Handle errors
            }

  request.open("POST", url);            
  request.setRequestHeader("Content-Type", "application/soap+xml;charset=utf-8");
  request.send(httpBody);

残念ながら、セッションはCookieに設定されているため、サーバーは同じセッションサービス呼び出しを順番に処理しようとします。これは、長いポーリングプロセスの大きな問題です。簡単な解決策は、ヘッダーからCookieを削除して、Silverlightクライアントスタックを使用したSilverlightポーリングのように見せることです。

request.setRequestHeaderは、ヘッダー値にのみ追加されます。.sendの先頭にCookieが設定されているように見えるため、これは何の違いもないようです。

Mozillaのみのソリューション。

http://www.michael-noll.com/tutorials/cookie-monster-for-xmlhttprequest/

request.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS;

ASP.NET_SessionIDCookieも削除しません。ASPXAUTHcookieは削除されますが。

ASP.NET互換性/セッションが有効な環境で後続のAJAXサービス要求をブロックしないAJAXアクセス可能な長時間実行サービスタスクのソリューションを持っている人はいますか?

4

1 に答える 1

2

答えはここにあります...

.NET 4では、Application_BeginRequestでこれを行うことができます

if(Context.Request.Path.EndsWith( "xxx.svc"))Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);

--IISでホストされているWCFまたはASMX[Webサービス]にセッションオブジェクトを読み取り専用で使用させるにはどうすればよいですか?

コールバックサービスのSessionStateBehaviorを変更することで、このサービスを分離して非順次に実行し、ブロックを停止することができました。

ありがとうCine(https://stackoverflow.com/users/264022/cine

于 2012-05-24T19:11:01.970 に答える