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

时间:2015-01-20 21:08:03

标签: sql-server wcf stored-procedures clrstoredprocedure

我正面临着一个由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参数是否带有值。

任何线索?

1 个答案:

答案 0 :(得分:1)