我相信這是一個簡單的問題,但我找不到解決方案。我想保存發佈到我的.NET Web服務的XML文件。我相信這只是一個簡單的方法調用時調用服務,但我沒有找到它。我想保存完整的XML發佈到服務將所有帖子保存爲XML到XML數據庫
任何幫助將不勝感激。先謝謝你。
我相信這是一個簡單的問題,但我找不到解決方案。我想保存發佈到我的.NET Web服務的XML文件。我相信這只是一個簡單的方法調用時調用服務,但我沒有找到它。我想保存完整的XML發佈到服務將所有帖子保存爲XML到XML數據庫
任何幫助將不勝感激。先謝謝你。
感謝你的幫助,但是我發現我一直在尋找在http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx
爲了幫助別人,我這是我通過WebService實現的新內容,包括我爲實現它和修改所執行的步驟,以便將它保存到數據庫以及我執行以下步驟的文件系統中。如果您有任何問題,請隨時諮詢,我會很樂意回答。
創建了幾個屬性來存儲值在列出的代碼保存到數據庫
private string _requestXml;
private DateTime _start;
然後我修改了WriteInput方法以將值保存到這些變量。
public void WriteInput(SoapMessage message)
{
//Begin Edit
oldStream.Position = 0;
_requestXml = new StreamReader(_oldStream).ReadToEnd();
_start = DateTime.UtcNow;
//End Edit
//Begin Original Code
oldStream.Position = 0;
Copy(oldStream, newStream);
var fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
var w = new StreamWriter(fs);
var soapString = (message is SoapServerMessage) ? "SoapRequest" : "SoapResponse";
w.WriteLine("-----" + soapString + " at " + DateTime.Now);
w.Flush();
newStream.Position = 0;
Copy(newStream, fs);
w.Close();
newStream.Position = 0;
}
然後我修改了WriteOutput到
public void WriteOutput(SoapMessage message)
{
//Begin Edit
var responseXml = new StreamReader(newStream).ReadToEnd();
newStream.Position = 0;
//Start process for saving to DB
//"_requestXml" = Original Request Soap Message
//"responseXml" = Service Returned Response
//"_start" = Request Start Time
//message.MethodInfo.Name = I save this so I know what method from
//message.Url = I save this so I know the original ASMX that was hit
//End Edit
//Begin Original Code
newStream.Position = 0;
var fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
var w = new StreamWriter(fs);
var soapString = (message is SoapServerMessage) ? "SoapResponse" : "SoapRequest";
w.WriteLine("-----" + soapString + " at " + DateTime.Now);
w.Flush();
Copy(newStream, fs);
w.Close();
newStream.Position = 0;
Copy(newStream, oldStream);
}
現在,所有剩下的就是添加以下到您的服務請求,你應該是好去
[WebMethod, NameSpace.OfyourTraceExtesionClass.TraceExtension]
public void WebMethod1()
{
//DoSomeStuff
}
如果您想記錄http發佈消息,解決這個問題的一個優雅方法是在Web服務前設置一個簡單的反向代理。在這個代理中,你可以完全訪問原始的http請求。
[WebMethod]
public void XMLPersing()
{
var XMLDATA = "";
WriteLogCLS objWriteLog = new WriteLogCLS();
Stream receiveStream = HttpContext.Current.Request.InputStream;
receiveStream.Position = 0;
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); //For xml persing..
XMLDATA = readStream.ReadToEnd();
readStream.Close();
objWriteLog.WriteLog(Convert.ToString(XMLDATA));
XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("Log/Exception/Sample.xml"));
DataSet ds = new DataSet();
ds.ReadXml(xmlreader);
xmlreader.Close();
if (ds.Tables.Count != 0)
{
var strCon = string.Empty;
strCon = ConfigurationManager.AppSettings["constring"];
SqlCommand cmdInsertXMLData = new SqlCommand();
SqlConnection SqlConn;
SqlConn = new SqlConnection(strCon);
try
{
cmdInsertXMLData = new SqlCommand("usp_InsertXML", SqlConn);
cmdInsertXMLData.CommandType = CommandType.StoredProcedure;
// cmdInsertLoginDetails.Parameters.Add("@XMLdata", SqlDbType.Xml).Value = ds.GetXml();
cmdInsertXMLData.Parameters.AddWithValue("@XMLdata", SqlDbType.Xml);
if (SqlConn.State == ConnectionState.Closed)
{
SqlConn.Open();
}
cmdInsertXMLData.ExecuteNonQuery();
// response = cmdInsertLoginDetails.Parameters["@Message"].Value.ToString();
}
catch (Exception ex)
{
objWriteLog.WriteLog("Error on XML Persing : " + ex.Message);
// response = "Error";
}
finally
{
if (cmdInsertXMLData != null)
{
cmdInsertXMLData.Dispose();
}
if (SqlConn.State == ConnectionState.Open)
{
SqlConn.Close();
SqlConn.Dispose();
}
objWriteLog = null;
}
// return response ;
}
}
}
問題太廣泛無法回答。你可以說得更詳細點嗎? – 2010-06-01 02:29:47
您需要指定您使用的是舊版ASMX Web服務,而不是WCF服務。 – 2010-06-01 16:37:08