WCFサービスの自動生成プロキシーを作成して、手動でサービスプロキシーを作成しないようにします。Reflection.Emitパラメーターの受け渡し
bool isVoid;
if ((isVoid = (methodInfo.ReturnType != typeof(void))))
generator.DeclareLocal(methodInfo.ReturnType);
generator.Emit(OpCodes.Ldarg_0);
var channelProperty = baseType.GetMethod(ChannelPropertyGetName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty);
generator.EmitCall(OpCodes.Call, channelProperty, null);
for (short index = 0; index < parameters.Count(); index++)
generator.Emit(OpCodes.Ldarg, (index + 1));
generator.Emit(OpCodes.Callvirt, methodInfo);
if (isVoid)
{
generator.Emit(OpCodes.Stloc_0);
generator.Emit(OpCodes.Ldloc_0);
}
generator.Emit(OpCodes.Ret);
私もサービスし、適切なサービスを持っている:リフレクションを使用して
は、私は(アセンブリからメソッドへの)動的クラス生成の完全なサイクルを作成しましたし、私の方法の世代のコードはそうのように見える、放出します契約はそうのようになります。
[ServiceContract]
public interface INamingService
{
/// <summary>
/// Resolve a name
/// </summary>
[OperationContract(Name = "GetName")]
string GetName(string name);
}
が、私は指定された名前(NOT NULL)で、このサービスから値を取得しようとしている、私は、クライアントの呼び出しから来るパラメータがnullであることがわかります。したがって、私が理解する限り、私はEmitで間違いを犯し、パラメータは渡されません。
この問題を解決する方法はありますか?ここで
私の助言はあなたが望むコードをC#で書いてコンパイルし、生成されたILをあなたがそのタスクのために放出しているものと比較することです。 –