2011-12-08 14 views
0

我們的域名服務的WCF RIA服務方法具有以下「調用」操作撥打:如何以下從JavaScript

public void SaveImportedUrl(CRIAImportedUrl i_importedUrl) 

public class CRIAImportedUrl 
{ 
    [Key] 
    public Uri Url { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 

    // ... more properities 
} 

我想從一個JavaScript客戶端調用這個(在JSON終點)。 通過查看silverlight客戶端的調用(在fiddler中),我可以看到我需要POST到'SubmitChanges'url。但是Silverlight客戶端使用二進制端點,並且我看不到POST消息的內容是什麼樣子。

有誰知道如何做到這一點?或者是否可以通過獲取源代碼或解碼二進制編碼的POST消息內容來「逆向工程」Silverlight代碼?

(我們成功地調用'CRUD'操作(http://stackoverflow.com/questions/8179504/how-to-insert-entity-over-wcf-ria-services-json-endpoint),但是這個'調用' 操作仍是一個謎)

EDIT ---

錯誤消息馮服務器,WENN DER POST消息內容=

{ 
"Url":"http://www.bbc.co.uk/", 
"Title":"a title", 
"Description":"adesc" 
} 

{ 「錯誤碼」 500 「的ErrorMessage」: 「對象引用未設置爲對象的實例」,「IsDomainException」:false,「StackTrace」:「at System.ServiceModel.Doma inServices.Hosting.ChangeSetProcessor.CreateChangeSet(IEnumerable的1 changeSetEntries)\u000d\u000a at System.ServiceModel.DomainServices.Hosting.ChangeSetProcessor.Process(DomainService domainService, IEnumerable 1 changeSetEntries)\ u000d \ u000a在System.ServiceModel.DomainServices.Hosting.SubmitOperationBehavior.SubmitOperationInvoker.InvokeCore(Object實例,對象[]輸入,對象[] &輸出)「}

+1

沒有爲小提琴手一個插件,可以讓你檢查由SL客戶端發送的二進制消息:HTTP: //archive.msdn.microsoft.com/wcfbinaryinspector – TheNextman

+0

非常有幫助 - 謝謝。我認爲你應該寫這個答案,而不是僅僅作爲評論添加。 – GarethOwen

回答

0

沒有爲小提琴手一個插件,可以讓你檢查由SL客戶端發送的二進制消息:WCF Binary Inspector

+0

謝謝,這有助於。而且,我發現Silverlight論壇似乎是WCF-RIA問題的更好資源。 – GarethOwen

0

你的WCF端點配置是什麼樣的?我猜測它使用的是TcpBinary,因此你將不能只是'逆向工程'它,因爲還有很多SOAP處理消息正在傳播......

我建議添加一個新的WCF端點,配置對於JSON,這樣你就可以調用完全相同的方法,但是可以從不同的客戶端在不同的端點上調用。

+0

感謝Leon - 我們已經有了一個JSON端點,我們可以成功調用其他CRUD操作。但不是這種「調用」操作。 – GarethOwen

+0

那麼當您發佈到「調用」操作時,WCF跟蹤日誌會顯示什麼內容? – Leon

+0

我將錯誤消息添加到答案 – GarethOwen