通过ASMX Web服务

通过ASMX Web服务

问题描述:

我有了这样的签名的SQL Server 2005的存储过程传递XML参数的存储过程:通过ASMX Web服务

CREATE PROCEDURE [dbo].[ProcTRequest] 
    @Pxml xml, @ClientCode varchar(10) 
AS 
BEGIN 
    ... 
END 

我与写作.asmx网络服务,将调用此任务存储过程。这是我有一个块的地方。

如果参数@Pxml被指定为C#Web方法的字符串,我们得到

服务器无法处理请求。

然后试图XmlText作为@Pxml的类型,这导致

服务器无法处理请求。方法MyWebService.MyWebMethod无法反映。反映'PXml'的错误 。 - >;反映类型 'System.Xml.XmlText'的错误。 - > System.Xml.XmlText不能用作:'xml element'。

从C#web方法调用此存储过程的正确方法是什么?请注意,@Pxml参数将始终是格式良好的XML。

将调用此Web服务的人在Unix系统上使用Curl。

虽然要求是一个ASMX,如果这可以通过WCF实现,你可以告诉我怎么用一段伪代码?我还不熟悉WCF。

请帮忙。谢谢。

UPDATE:这是我如何调用该SP的ASMX接口上

[WebMethod] 
public string GetRequestID(string PXml, string clientcode) 
    { 
     Database db = DatabaseFactory.CreateDatabase(); 
     using (IDataReader dr = db.ExecuteReader("ProcRequestID", PXml, clientcode)) 
     { 
      return dr["RequestID"].ToString(); 
     } 
    } 

你不能使用字符串(所以调用者送你一个字符串),但ASMX Web服务中,您将存储过程调用中的参数@PXml定义为SqlDbType.Xml?我认为,应该工作....

东西线沿线的:

[WebMethod] 
public void MyWebMethod(string input, string clientCode) 
{ 
     using (SqlConnection conn = new SqlConnection(your-connection-string-here)) 
     using (SqlCommand cmd = new SqlCommand("dbo.ProcTRequest", conn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.Add("@Pxml", SqlDbType.Xml); 
      cmd.Parameters.Add("@ClientCode", SqlDbType.VarChar, 10); 

      cmd.Parameters["@Pxml"].Value = input; 
      cmd.Parameters["@ClientCode"].Value = clientCode; 

      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
} 

既然你只是调用存储过程,而不是期待结果集返回 - 使用ExecuteNonQuery代替ExecuteReader

同样至关重要的是:告诉ADO.NET您打电话给存储过程!这是该行所做的:

  cmd.CommandType = CommandType.StoredProcedure; 

否则,ADO.NET默认期望得到充分内嵌SQL语句,可能只是无法解析和执行....