2

デリゲート呼び出しを使用して Web サービスのメソッドを呼び出そうとしています:

public IEnumerable<MyDataType> List(bool showDeleted)
{
    var result = ResponseHelper<dynamic[], IEnumerable<MyDataType>>(new dynamic[] {InstanceGuid, showDeleted}, "List");
    return result;
}

public MyDataType Get(int myDataTypeId, bool showDeleted)
{
    var result = ResponseHelper<dynamic[], MyDataType>(new dynamic[] {InstanceGuid, myDataTypeId, showDeleted}, "Get");
    return result;
}


public static R ResponseHelper<T, R>(T parameters, string serviceAction)
{
    var results = default(R);
    foreach (var service in _webServiceCoordinator.GetServices())
    {
        var func = (Func<T, R>)Delegate.CreateDelegate(typeof(Func<T, R>), service, serviceAction);
        try
        {
            results = func(parameters);
            break;
        }
        catch
        {
            _webServiceCoordinator.LastServiceFaulted();
        }
    }
    return results;
}

このメソッドは、このコントラクトのサービスを含む_webServiceCoordinator.GetServices()IEnumerable を返します 。System.Runtime.Remoting.Proxies.__TransparentProxy

public interface IOverrideService : IWebService
{
    IEnumerable<MyDataType> List(Guid instanceGuid, bool showDeleted);
    MyDataTypeGet(Guid instanceGuid, int myDataTypeId, bool showDeleted);
}

Delegate.CreateDelegate行で受け取るエラーは次のとおりです。

Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.

私の考えでは、プロキシクラスのデリゲートであるため失敗していますが、(私の考えでは) ポインターのポインターは引き続き機能するはずです。

別のエラーメッセージが表示されても、この質問に関連しているのかと思いました。

これは .Net 4.0 プロジェクトですが、VS2012 を使用しています (したがって、.NET 4.5 がインストールされています)。

4

0 に答える 0