2012-05-15 49 views
0

在升級到WCF Data Services 5.0 for OData V3後,我無法進行插入或更新。 唯一可能的是選擇。升級到WCF Data Services 5.0後缺少Content-Type標頭值

EDIT

在異常重寫方法HandleException:

異常: System.Data.Services.DataServiceException:Content-Type頭值丟失。 在System.Data.Services.HttpProcessUtility.ReadContentType(字符串的contentType,字符串& MIME,編碼&編碼) 在System.Data.Services.Serializers.Deserializer.CreateDeserializer(RequestDescription描述,IDataService DataService的,布爾更新,UpdateTracker跟蹤器) 在System.Data.Services.DataService 1.HandlePostOperation(RequestDescription description, IDataService dataService) at System.Data.Services.DataService 1.ProcessIncomingRequest(RequestDescription描述,IDataService的DataService) 在System.Data.Services.DataService 1.HandleNonBatchRequest(RequestDescription description) at System.Data.Services.DataService 1.HandleRequest()

ResponseStatusCode:400

客戶代碼 我設置在HTTP請求報頭的令牌......

/// <summary> 
    /// Initializes a new instance of the <see cref="ServiceBase"/> class. 
    /// </summary> 
    /// <param name="uri">service uri</param> 
    protected ServiceBase(Uri uri) 
    { 
     this.Context = new Entities(uri) { MergeOption = MergeOption.OverwriteChanges }; 
     this.Context.SendingRequest += new EventHandler<SendingRequestEventArgs>(this.ContextSendingRequest); 
    } 

    /// <summary> 
    /// OnSendingRequest 
    /// </summary> 
    /// <param name="sender">source</param> 
    /// <param name="e">event args</param> 
    private void ContextSendingRequest(object sender, SendingRequestEventArgs e) 
    { 
     e.RequestHeaders["token"] = "xyassdfdfdfdf"; 
    } 

服務的代碼: 的服務解析這個頭,並檢查令牌

public XYDataService() 
    { 
     this.ProcessingPipeline.ProcessingRequest += this.ProcessingPipelineProcessingRequest; 
    } 


    /// <summary> 
    /// OnProcessingRequest 
    /// </summary> 
    /// <param name="sender">source</param> 
    /// <param name="e">event args</param> 
    private void ProcessingPipelineProcessingRequest(object sender, DataServiceProcessingPipelineEventArgs e) 
    { 
     var authHeader = HttpContext.Current.Request.Headers["token"]; 

     if (string.IsNullOrEmpty(authHeader) || !authHeader.Equals("xyassdfdfdfdf")) 
     { 
      throw new DataServiceException(401, "401 Unauthorized"); 
     } 
    } 

謝謝你的幫助。

Andi

+0

你可以請詳細描述一下情況嗎?你在用什麼客戶?如果可能的話,你可以使用Fiddler來抓取一個蹤跡嗎? –

+0

在SaveChanges期間,我收到錯誤消息。選擇沒有問題。在更新期間或在添加新條目時,我會收到上述錯誤。我正在使用silverlight客戶端。 andi –

+0

你可以請隨着callstack發佈異常嗎?也請使用Fiddler並抓取失敗的請求/響應的跟蹤。 –

回答

0

使用答案,因爲我需要在這裏放置更多的文本。

我嘗試了很相似的代碼到你,但它工作得很好:

DemoService ctx = new DemoService(new Uri("http://services.odata.org/(S(jcemln1vp0u1gqtoyqqpwrc1))/OData/OData.svc/")); 
ctx.UsePostTunneling = true; 
ctx.SendingRequest += (sender, ea) => { ea.RequestHeaders["token"] = "value"; }; 

ctx.UpdateObject(ctx.Products.First()); 
ctx.SaveChanges(); 

運行此採用了最新的WCF DS 5.0位來自的NuGet工作。我還用Fiddler驗證它確實發送了Content-Type標題。

另一方面,您的請求沒有Content-Type標頭。你能否確認你使用的是最新的NuGet軟件包,並且你上面發佈的代碼真的是你正在測試的?

+0

嗨vitek我使用的是最新版本5.0.1。所有工作正常與以前的版本4.0 –

+0

如果可能請你準備一個repro項目並將它發送給我vitek.karas在微軟com。 –

相關問題