CoreWCF с интерфейсом в качестве параметра

я пытаюсь использовать CoreWCF для создания службы Windows со всеми подключениями любого поставщика базы данных, который реализует IDbConnection

транспорт сериализованной информации работает с простыми типами, такими как int, string и т. д., со сложными типами с атрибутом [DataContract] для

но я хочу создать метод, который возвращает IDBConnection клиенту... к сожалению, в wcf возникает общее исключение "базовое соединение было закрыто, соединение было неожиданно закрыто"

я не знаю, возможно ли транспортировать объект, основываясь только на информации об интерфейсе, надеюсь, кто-нибудь может мне помочь с этим

пытался настроить ведение журнала, но, по-видимому, на сервере не возникает никаких ошибок, отладка в конце.. только на клиенте

моя серверная программа.cs

      public class Program
{
public static void Main()
{
    try
    {
        var builder = WebApplication.CreateBuilder();

        builder.WebHost.ConfigureKestrel((context, options) => options.AllowSynchronousIO = true);
        builder.Services.AddServiceModelServices();
        builder.Services.AddServiceModelMetadata();   
        builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();
        builder.Services.AddSingleton<FirebirdDataBase>();
        var app = builder.Build();
        app.UseServiceModel(serviceBuilder =>
        {
           
                serviceBuilder.AddService<FirebirdDataBase>(x => x.DebugBehavior.IncludeExceptionDetailInFaults = true) ;
                serviceBuilder.AddServiceEndpoint<FirebirdDataBase, IDataBaseFunctions>(GenerateBasicHttpBinding(), "/Service.svc");
                serviceBuilder.AddServiceEndpoint<FirebirdDataBase, IDataBaseFunctions>(GenerateWSHttpBinding(), "/WSHttps.svc");
          

            var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
            serviceMetadataBehavior.HttpsGetEnabled = true;
        });

        app.Run();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
        Console.ReadKey();
    }
}

private static BasicHttpBinding GenerateBasicHttpBinding()
{
    var bindHttp = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
    bindHttp.Security.Mode = BasicHttpSecurityMode.None;
    bindHttp.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
    return bindHttp;
}

private static WSHttpBinding GenerateWSHttpBinding()
{
    var bindWS = new WSHttpBinding(SecurityMode.Transport);
    bindWS.Security.Mode = SecurityMode.None;
    bindWS.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
    return bindWS;
}

}

реализованная услуга

      [ServiceContract]
public interface IDataBaseFunctions
{   
    [OperationContract]
    IDbConnection CreateConnectionAux(int type);
}


public class FirebirdDataBase : IDataBaseFunctions
{
    public IDbConnection CreateConnectionAux(int tipoConexao)
    {
    
        //implementation
        
        return new FbConnection("");        
    }
}

клиент

      static void Main(string[] args)
    {
        CallWsHttpBinding("http://localhost:5266");
    }

    private static void CallWsHttpBinding(string hostAddr)
    {
        var binding = new WSHttpBinding(SecurityMode.None);
        binding.MaxReceivedMessageSize = int.MaxValue;
        var factory = new ChannelFactory<IDataBaseFunctions>(binding, new EndpointAddress($"http://localhost:5266/WSHttps.svc"));            
        try
        {
            IDataBaseFunctions client = factory.CreateChannel();             
            var results = client.CreateConnectionAux(0);
        }
        catch(Exception ex)
        {
            ex.ToString();
        }
    }

и de stacktrace

          System.ServiceModel.CommunicationException
  HResult=0x80131501
  Message= The underlying connection was closed: The connection was closed unexpectedly
  Source=mscorlib
  StackTrace:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at ConsoleApp2.ServiceReference1.IDataBaseFunctions.CreateConnectionAux(Int32 tipoConexao)
   at ConsoleApp2.Program.CallWsHttpBinding(String hostAddr) in C:\Users\maico\source\repos\ConsoleApp2\Program.cs:line 33

  This exception was originally thrown at this call stack:
    [External Code]

Inner Exception 1:
WebException: The underlying connection was closed: The connection was closed unexpectedly

0 ответов

Другие вопросы по тегам