我正面临着一个由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参数是否带有值。
任何线索?
答案 0 :(得分:1)