I'm facing a very strange issue with a WCF Service called by a CLR Stored Procedure.
Basically my service expects an array of elements as follows:
[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
Putting a break point inside my service, I could check that only C and E parameters are with values.
Any clues?
Well, it seems that it's a known bug. Here's the solution: