2009-03-08 3 views
3

HttpWebRequestを使用してSilverlightでRESTfulサービスにリクエストを行うと、リクエストにヘッダーを追加しない限り、正常に機能します。Silverlightでヘッダーを設定する方法HttpWebRequestを取得しますか?

は、私はこの

var webReq = (HttpWebRequest)WebRequest.Create(new Uri(_RemoteAddress, "GetProviderMetadata")); 
webReq.Method = HttpMethodType.Get; 
webReq.Headers["SomeToken"] = "someTokenValue"; 

のようなコードを使用してヘッダーを追加するとすぐに、私はすぐにEndGetResponse()が呼び出されると、この質問の下部に貼り付けられた例外を取得します。これはなぜ誰でも知っていますか?リクエストを取得するヘッダーを追加することは正常な.NETでうまくいくように見えるので、Silverlightの制限のようなものだと思っていますが、明確にするドキュメントは見つかりません。

{System.NotSupportedException ---> System.NotSupportedException: Specified method is not supported. 
    at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2) 
    at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack) 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)} 
    [System.NotSupportedException]: {System.NotSupportedException ---> System.NotSupportedException: Specified method is not supported. 
    at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2) 
    at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack) 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)} 
    _className: "System.NotSupportedException" 
    _data: {System.Collections.ListDictionaryInternal} 
    _dynamicMethods: null 
    _exceptionMethod: null 
    _exceptionMethodString: null 
    _helpURL: null 
    _HResult: -2146233067 
    _innerException: {System.NotSupportedException: Specified method is not supported. 
    at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)} 
    _message: "" 
    _remoteStackIndex: 0 
    _remoteStackTraceString: null 
    _source: "System.Windows" 
    _stackTrace: {sbyte[192]} 
    _stackTraceString: null 
    _xcode: -532462766 
    _xptrs: 0 
    Data: {System.Collections.ListDictionaryInternal} 
    HelpLink: null 
    HResult: -2146233067 
    InnerException: {System.NotSupportedException: Specified method is not supported. 
    at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) 
    at System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)} 
    Message: "" 
    Source: "System.Windows" 
    StackTrace: " at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)\r\n at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n at Intellidimension.RdfEntity.Service.RemoteEntityServiceProviderClient.getProviderMetadataResponse(IAsyncResult result)\r\n at System.Net.BrowserHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2)\r\n at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)\r\n at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)\r\n at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)" 
    System.Runtime.InteropServices._Exception.HelpLink: null 
    System.Runtime.InteropServices._Exception.Source: "System.Windows" 

答えて

3

Silverlightは、GETメソッドではなくPOSTメソッドを使用してヘッダーを設定することのみをサポートしています。これは、SilverlightでTCP/IPスタックがどのように実装されているかという制限があるためです。これは、ホストOSのAPIに対して直接行うのではなく、ブラウザ拡張APIを使用します。

+2

する場合があります。この制限を説明するMSDNドキュメントへのリンクがありますか?私は何かを見つけることができませんでした。 –

+0

私が見つけた最も近いものは、このページの一番下にあるリストです:https://msdn.microsoft.com/en-us/library/system.net.webheadercollection(VS.95).aspx特定のヘッダーはメソッドとURIに基づいて制限されています。 –

5

WebRequestを開始する前に"Client HTTP" handlingを指定してください。このよう

:私はこれを推測して

bool httpResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
bool httpsResult = WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 
+0

私はClientHttpを使ってGETリクエストでヘッダを設定できることを確認しましたが、各WebRequestをClientHttpとして次のように作成しています。 'var request =(HttpWebRequest)System.Net.Browser.WebRequestCreator.ClientHttp.Create(endpoint);' BrowserHttp前の回答の説明どおりにGETリクエストのヘッダを制限しますが、ClientHttpはそうしません。 –

関連する問題