在閱讀了更多關於它並試圖實施wshttpbinding後,它就不會發生。無論我嘗試什麼,我都會收到以下錯誤消息(安全模式已註釋掉)。我明白爲什麼,因爲綁定之間的SOAP版本不同。使用wsHttpBinding
「(415)無法處理該消息,因爲該內容類型 '應用/肥皂+ xml的;字符集= UTF-8' 是不預期的類型 '文本/ XML;字符集= UTF-8'」
我在下面的鏈接閱讀更多關於TransportWithMessageCredentials:
http://msdn.microsoft.com/en-us/library/ms789011.aspx
但還是沒能得到它的工作。
我可以使用basicHttpBinding對內部應用程序很好,並且效果很好(如果我不包含任何事務),但是我的WCF層中的應用程序仍然需要支持事務(參見下文),從中我明白了basicHttpBinding不支持,因爲它不包含事務流屬性。
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
當我嘗試和運行下面包括安全模式,在SVC配置編輯器甚至不啓動並引發以下錯誤:「System.InvalidOperationException:找不到匹配方案的基址https綁定WSHttpBinding的端點,註冊的基地址方案是[http]。「
我知道它期望某種SSL/HTTPS安全,但我的網站(正如你可以看到下面是http)。對於面向公衆的網站來說,這樣做會很好,但對於內部網站而言,現在,我想要做的就是支持交易。
這裏是我的服務器端安裝程序的wsHttpBinding:
<bindings>
<wsHttpBinding>
<binding name="WsHttpBinding_IYeagerTechWcfService" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="24.20:31:23.6470000" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transactionFlow="true">
<security mode="Transport" >
<transport clientCredentialType = "Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<?xml version="1.0"?>
<services>
<clear />
<service name="YeagerTechWcfService.YeagerTechWcfService">
<endpoint address="" binding="wsHttpBinding" contract="YeagerTechWcfService.IYeagerTechWcfService" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://abc.com/yeagerte/YeagerTechWcfService.YeagerTechWcfService.svc" />
</baseAddresses>
</host>
</service>
</services>
這裏是我的客戶端設置:
<?xml version="1.0"?>
<client>
<endpoint address="http://abc.com/yeagerte/YeagerTechWcfService.YeagerTechWcfService.svc"
binding="wsHttpBinding" contract="YeagerTechWcfService.IYeagerTechWcfService"
name="WsHttpBinding_IYeagerTechWcfService" />
</client>
可能有人請提供以下信息:
有另一種方式來支持WCF for basicHttpBinding或其他方式的交易?
如果是這樣,我該如何實現它?
如果不是,我的選擇是什麼?
對於上述問題,我可能已經想出了一個答案,但希望由在這個問題上更有經驗的人來運行它。
代替具有WCF層處理交易(如上面提到的),我建議我使用basicHttpBinding的和在我的控制器下面的代碼時,它在將數據傳遞到WCF層:
// method here
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
db.EditCategory(cat);
// the above code would execute the EditCategory method below in the WCF layer and keep the transaction alive ts.Complete();
ts.Dispose();
}
return Json(new GridModel(db.GetCategories()));
// end method
WCF層:
public void EditCategory(Category cat)
{
try
{
using (YeagerTechEntities DbContext = new YeagerTechEntities())
{
Category category = new Category();
category.CategoryID = cat.CategoryID;
category.Description = cat.Description;
// do another db update here or in another method...
DbContext.Entry(category).State = EntityState.Modified;
DbContext.SaveChanges();
}
}
catch (Exception ex)
{
throw ex;
}
}
對於使用SSL面向公衆的網站,我該如何正確實現的wsHttpBinding?
fyi,我嘗試了一下我在控制器中使用transactionscope的選項,並且它在basicHttpBinding中正常工作。 任何其他反饋關於這個和/或其他問題關於我以前的帖子將不勝感激。 – sagesky36