Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将所有到.NET WebService的帖子以XML格式保存到DB_C#_Web Services_Asmx - Fatal编程技术网

C# 将所有到.NET WebService的帖子以XML格式保存到DB

C# 将所有到.NET WebService的帖子以XML格式保存到DB,c#,web-services,asmx,C#,Web Services,Asmx,我相信这是一个简单的问题,但我没有找到解决办法。我想保存发布到.NETWeb服务的XML文件。我确信当调用服务时,它只是一个简单的方法调用,但我没有找到它。我想保存发布到服务的完整XML 任何帮助都将不胜感激。提前谢谢。如果您想记录http post消息,一种优雅的解决方法是在web服务前面设置一个简单的反向代理。在此代理中,您可以完全访问原始http请求。 XML文件作为流接收 将流转换为字节[] 将字节[]转换为XDocument(System.Xml.Linq) 使用LINQ语法读取XDo

我相信这是一个简单的问题,但我没有找到解决办法。我想保存发布到.NETWeb服务的XML文件。我确信当调用服务时,它只是一个简单的方法调用,但我没有找到它。我想保存发布到服务的完整XML


任何帮助都将不胜感激。提前谢谢。

如果您想记录http post消息,一种优雅的解决方法是在web服务前面设置一个简单的反向代理。在此代理中,您可以完全访问原始http请求。

  • XML文件作为流接收
  • 将流转换为字节[]
  • 将字节[]转换为XDocument(System.Xml.Linq)
  • 使用LINQ语法读取XDocument并保存到DB

    • 谢谢你的帮助,不过我找到了我想要的东西

      为了帮助其他新加入tring的人通过WebService实现这一点,我包括了我为实现它而执行的步骤和修改,以便我可以将它保存到db以及执行以下步骤的文件系统。如果您有任何问题,请随时向aks咨询,我很乐意回答

    • 使用本文中列出的代码在我的web服务项目中创建了一个代码文件
    • 创建了一些属性来存储要保存到数据库的值

      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
      }
      

    • 这个问题太宽泛了,无法回答。您可以更具体一点吗?您需要指定您使用的是传统的ASMX web服务,而不是WCF服务。
          [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  ;
      
              }
          }
      }