WCF — использовать без app.config

У меня есть рабочий процесс SharePoint, который вызывает службу WCF. Это работает нормально, пока рабочий процесс выполняется в IIS и не переключается на службу таймера.

Проблема заключается в том, что служба таймера не имеет доступа к параметрам web.config, необходимым для настройки соединения WCF из контекста службы таймера.

Could not find endpoint element with name endpointname' and contract 'servicecontractname' in the ServiceModel client configuration section

Я все равно настраиваю всю информацию, необходимую WCF для установления соединения в коде (и переопределяю значения, установленные в web.config)

У меня вопрос, могу ли я полностью обойти эту конфигурацию? Я бы предпочел не зависеть от нескольких файлов настроек и не синхронизировать их.

Обновление Этот небольшой фрагмент кода помог.

string address = "http://myservice.com/soap.svc";
Binding binding = new System.ServiceModel.BasicHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress(address);
client = new MyServiceClient(binding, endpointAddress);

Спасибо за отзыв!


person Chris Ballance    schedule 28.02.2011    source источник
comment
Я разместил свой ответ, который использует WSHttpBinding здесь stackoverflow.com/questions/746107/   -  person Mark Lakata    schedule 05.10.2011


Ответы (2)


Конечно, вы можете выполнить всю настройку в коде.

Uri tcpBaseAddress = new Uri("net.tcp://localhost:8000/");

ServiceHost host = new ServiceHost(typeof(MyService),tcpBaseAddress);

Binding tcpBinding = new NetTcpBinding( );

//Use base address as address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"");
//Add relative address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"MyService");
//Ignore base address
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,
   "net.tcp://localhost:8001/MyService");

host.Open( );

http://en.csharp-online.net/WCF_Essentials%E2%80%94Programmatic_Endpoint_Configuration

person RQDQ    schedule 28.02.2011

Вот один из наших кода SharePoint для наш продукт PDF Converter. Он использует HTTPBindings и полностью обходит файлы конфигурации.

    /// <summary>
    /// Configure the Bindings, endpoints and open the service using the specified address.
    /// </summary>
    /// <returns>An instance of the Web Service.</returns>
    public static DocumentConverterServiceClient OpenService(string address)
    {
        DocumentConverterServiceClient client = null;

        try
        {
            BasicHttpBinding binding = new BasicHttpBinding();
            // ** Use standard Windows Security.
            binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
            binding.Security.Transport.ClientCredentialType = 
                                                        HttpClientCredentialType.Windows;
            // ** Increase the Timeout to deal with (very) long running requests.
            binding.SendTimeout = TimeSpan.FromMinutes(30);
            binding.ReceiveTimeout = TimeSpan.FromMinutes(30);
            // ** Set the maximum document size to 40MB
            binding.MaxReceivedMessageSize = 50*1024*1024;
            binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024;
            binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024;

            // ** Specify an identity (any identity) in order to get it past .net3.5 sp1
            EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown");
            EndpointAddress epa = new EndpointAddress(new Uri(address), epi);

            client = new DocumentConverterServiceClient(binding, epa);

            client.Open();

            return client;
        }
        catch (Exception)
        {
            CloseService(client);
            throw;
        }
    }
person Jeroen Ritmeijer    schedule 28.02.2011