clr 存储过程调用 wcf 服务缺少参数值

clr stored procedure call wcf service missing parameter values

我在使用 CLR 存储过程调用 WCF 服务时遇到了一个非常奇怪的问题。

基本上我的服务需要如下元素数组:

[ServiceContract]
public class ServiceFoo
{
    [OperationContract]
    bool ImportFoos(IEnumerable<Foo> foos);
}

public class Foo
{
    public int a {get;set;}
    public int b {get;set;}
    public string c {get;set;}
    public int d {get;set;}
    public string e {get;set;}
}

public class wsClient
    {
        public static void ImportFoos(int a, int b, string c, int d, string e)
        {
            ws.ServiceFoo ws = new ws.ServiceFoo();

            bool ImportFooResult = false;
            bool ImportFooResultSpecified = false;

            ws.ImportFoos(new ws.Foo[]
            {
                new ws.Foo
                {
                    a= a,
                    b = b,
                    c = c,
                    d = d,
                    e = e
                }

            }, out ImportFooResult, out ImportFooResultSpecified);
        }
    }

//SQL / CLR

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void sp_import_foo(int a, int b, string c, int d, string e)
    {        
        try
        {
            SqlPipe sqlPipe = SqlContext.Pipe;

            wsClient.ImportFoos(a, b, c, d, e);

            SqlContext.Pipe.Send("OK");
        }
        catch (Exception ex)
        {
            SqlContext.Pipe.Send(ex.Message + " - " + ex.StackTrace);
        }
    }
}


CREATE PROCEDURE [spWcfCall] 
    @a int, 
    @b int, 
    @c nvarchar(max), 
    @d int, 
    @e nvarchar(max)

WITH EXECUTE AS CALLER
AS
    EXTERNAL NAME CLRSample.StoredProcedures.sp_import_foo

在我的服务中放置一个断点,我可以检查只有 C 和 E 参数有值。

有什么线索吗?

好吧,这似乎是一个已知错误。解决方法如下:

http://blogs.msdn.com/b/eugeneos/archive/2007/02/05/solving-the-disappearing-data-issue-when-using-add-web-reference-or-wsdl-exe-with-wcf-services.aspx