我一直在研究WCF並根據我找到的「最佳實踐」緩慢地重構我的ASMX webservice解決方案(多個項目)遇到一些設計/架構問題,我覺得非常需要暫停和尋求建議。使用HTTP轉換ASMX webservice到WCF webservice使用netTcpBinding意味着替代使用HttpContext
摘要:如何在不使用ASP.Net MVC和「路由」的WCF服務中使用HttpContext?
詳情: 更好的性能是該重新寫一個主要目標,我讀過NetTcpBinding的是最好的那個,所以我想我需要避免:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
,需要避免:
serviceHostingEnvironment aspNetCompatibilityEnabled="true"
因此,重構了WCF web服務需要避免ASP.NET相關性,如HttpContext的,會話等我完全不只有一個的WebMethod(UploadFile)目前使用HttpContext的在這些片段使用Session:
[WebMethod(Description = "Upload a file with metadata properties packed in a delimited string")]
public string UploadFile(string trimURL
, byte[] incomingArray
, string fileName
, string RecordTypeName
, string metaDataString)
{
string pathFileInfo; // declared here in a "bare block" so it is in scope for the finally block too
try
{
pathFileInfo = ByteArrayToFile(fileName, incomingArray);
FileInfo fi = new FileInfo(pathFileInfo);
if (fi.Exists)
{
和這裏是HttpContext的使用:http://msdn.microsoft.com/en-us/library/aa702682.aspx:
public string ByteArrayToFile(string _FileName, byte[] _ByteArray)
{
string fullName = HttpContext.Current.Server.MapPath(@".\UploadWorkArea\") + _FileName;
using (FileStream _FileStream = new FileStream(fullName
, FileMode.Create
, FileAccess.Write))
{
_FileStream.Write(_ByteArray, 0, _ByteArray.Length);
_FileStream.Close();
return fullName;
}
}
因此,我在這裏發現了這個建議
「在AppDomain中,由HTTP運行時實現的功能適用於ASP.NET內容,但不適用於WCF。 ASP.NET應用程序平臺的許多HTTP專用功能不適用於包含ASP.NET內容的AppDomain內託管的WCF服務。這些功能的例子包括:
- 的HttpContext:從WCF服務中進行訪問時,電流總是空。 改爲使用RequestContext。
,並略低於:。
「這些限制只適用於託管在IIS應用程序ASP.NET內容的行爲不受WCF存在 WCF應用WCF服務,需要通過傳統的HTTP管道提供的功能,應考慮使用WCF等價物,它們是獨立的主機和運輸:
的OperationContext,而不是高程tpContext「。
最後,我加入了這個命名空間:
using System.Web.Routing;
..爲了解決這個問題本:
public RequestContext(
HttpContextBase httpContext,
RouteData routeData
)
而且我在那裏我感覺約在繼續進一步非常不確定的點到了。我讀了一點關於ASP.NET MVC和它的使用「路由」但我不是真的在那裏 - 我只是想重建這個,所以它可以使用更快的綁定性能。
希望我的問題很明確,並且我沒有爲你過多地提供一些建議。
謝謝!當我在你提供的鏈接上閱讀「第二個答案」時,沒有要求在ASPNetCompatibility模式下運行WCF webservice,所以我會盡力而且會讓我更接近NetTcpBinding。 –