2015-01-20 58 views
1

我正在面对一个CLR存储过程调用的WCF服务的一个非常奇怪的问题。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参数与值。

任何线索?

回答