2011-08-15 11 views
0

SilverlightアプリケーションからJSONを返すWCFサービスを呼び出そうとしています。単に整数を返すだけです。私はそれが私のwebserviceへの呼び出しをしていないことを確認するためにフィドラーを使用しています。 「オブジェクトの現在の状態によって操作が有効ではありません」というエラーが表示されます。 HttpWebResponseのレスポンス=(HttpWebResponse)_webRequest.EndGetResponse(result);という行に表示されます。必要に応じてスタックトレースを提供することができます。HttpWebRequestを使用してSilverlightアプリケーションからWCFを呼び出すときにエラーが発生する

public MainPage() 
    { 
     InitializeComponent(); 

     StartWebRequest(); 
    } 

    void StartWebRequest() 
    { 
     HttpWebRequest _webRequest = (HttpWebRequest)WebRequest.Create(new Uri("http://www.example.com/MyJSON.svc/onlineusercount")); 

     _webRequest.ContentType = "text/json"; 
     _webRequest.Method = "GET"; 
     _webRequest.BeginGetResponse(FinishWebRequest, _webRequest); 
    } 

    void FinishWebRequest(IAsyncResult result) 
    { 
     HttpWebRequest _webRequest = (HttpWebRequest)result.AsyncState; 

     HttpWebResponse response = (HttpWebResponse)_webRequest.EndGetResponse(result); 
     Stream streamResponse = response.GetResponseStream(); 
     StreamReader streamRead = new StreamReader(streamResponse); 
     string responseString = streamRead.ReadToEnd(); 
     needle.Value = Convert.ToInt32(responseString); 

     // Close the stream object 
     streamResponse.Close(); 
     streamRead.Close(); 

     // Release the HttpWebResponse 
     response.Close(); 
    } 
} 

UPDATE:ユーザーコードによってSecurityExceptionがが未処理:私はその上の行をコメントアウトしているが

_webRequest.ContentType = "text/json"; 

私の新しいエラーが言う言いますこれはtry catchを使うべきだと思っていますが、どのタイプの例外を捕まえるべきかわかりません。

次のように私のスタックトレースは次のとおりです。どちらの、

at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
at FuelizerGuage.MainPage.FinishWebRequest(IAsyncResult result) 
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2) 
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

またフィドラーによると、私のSilverlightアプリケーションは現在、clientaccesspolicy.xmlを探している私のWebサービスのドメインへの呼び出しで作って、その後のcrossdomain.xmlを探します存在する。

答えて

0

「GET」リクエストにはContent-Typeヘッダーを含めることはできません(内容は含めることができません)。 SilverlightのHttpWebRequest実装は、デスクトップフレームワークの実装よりも厳密です。そのプロパティを定義するlingを削除しようとするとうまくいくはずです。

更新:アプリケーションでクロスドメインの問題が発生しています。いくつかの種類のクロスドメイン攻撃を防ぐために、SLアプリケーション(.xapファイル)がクロスドメインポリシーの影響を受けるドメイン以外のドメインに行く要求は許可されていませんデフォルトでは詳細については、http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspxをご覧ください。

この問題を解決するには、本来、サービスにクロスドメインポリシーを追加して、SLアプリがそれを消費できるようにする必要があります。

+0

私はContentTypeを設定する行をコメントアウトしましたが、今は別のエラーが発生します。これは、エラーのStackTraceの先頭です。System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod、Object state) at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) – puddinman13

+0

また、リクエストはまだありません私のwebserviceに送信されます。フィドラーは依然として電話の兆候を見せていない。新しいエラーは、HttpWebResponseレスポンス=(HttpWebResponse)_webRequest.EndGetReponse(result)で発生します。ライン。あなたの返信ありがとう! – puddinman13

+0

エラーは何ですか? – carlosfigueira

関連する問題