صندوق رأس المال العامل:كيفية الحصول على ملزمة كائن من التكوين

StackOverflow https://stackoverflow.com/questions/355576

  •  21-08-2019
  •  | 
  •  

سؤال

أود الحصول على ملزمة كائن من شبكة الإنترنت.التكوين أو التطبيق.config.

إذا هذا الكود يعمل:

wcfTestClient = new TestServiceClient("my_endpoint", Url + "/TestService.svc");

ولكن أود أن تفعل ما يلي:

Binding binding = DoSomething();
wcfTestClient = new TestServiceClient(binding, Url + "/TestService.svc");

أنا مهتم في DoSomething() الأسلوب بالطبع.

هل كانت مفيدة؟

المحلول

ويمكنك مثيل ملزمة بإعطاء اسم التكوين ملزمة من App.config / الملف web.config.

http://msdn.microsoft.com/en-us/library /ms575163.aspx

<اقتباس فقرة>   

وتهيئة مثيل جديد من فئة WSHttpBinding مع ملزمة محدد بالاسم التكوين الخاص بها.

     

والمثال التالي يوضح كيفية تهيئة مثيل جديد من   WSHttpBinding فئة مع وسيطة سلسلة.

// Set the IssuerBinding to a WSHttpBinding loaded from config
b.Security.Message.IssuerBinding = new WSHttpBinding("Issuer");

نصائح أخرى

هذا بلوق وظيفة من كافة غابارا ، فإنه يظهر كيفية تعداد الارتباطات تكوين

إذا كنت لا تعرف نوع ملزمة حتى وقت التشغيل ، يمكنك استخدام ما يلي:

return (Binding)Activator.CreateInstance(bindingType, endpointConfigName);

حيث bindingType من نوع ملزمة endpointConfigName هو اسم المحدد في ملف التكوين.

وشملت جميع الارتباطات توفير منشئ أن يأخذ endpointConfigurationName كمعلمة فقط لذلك هذا يجب أن تعمل على كل منهم.لقد استخدمت على WsHttpBinding و NetTcpBinding دون مشاكل.

هذا الجواب يحقق المرجع طلب و هو 100 ٪ المستخرجة من هذا المنصب مذهلة من بابلو م.Cibraro.

http://weblogs.asp.net/cibrax/getting-wcf-bindings-and-behaviors-from-any-config-source

هذا الأسلوب يتيح لك config هو ملزم القسم.

private BindingsSection GetBindingsSection(string path)
{
  System.Configuration.Configuration config = 
  System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(
    new System.Configuration.ExeConfigurationFileMap() { ExeConfigFilename = path },
      System.Configuration.ConfigurationUserLevel.None);

  var serviceModel = ServiceModelSectionGroup.GetSectionGroup(config);
  return serviceModel.Bindings;
}

هذا الأسلوب يتيح لك الفعلية Binding الكائن الذي هي بأمس الحاجة.

public Binding ResolveBinding(string name)
{
  BindingsSection section = GetBindingsSection(path);

  foreach (var bindingCollection in section.BindingCollections)
  {
    if (bindingCollection.ConfiguredBindings.Count > 0 
        && bindingCollection.ConfiguredBindings[0].Name == name)
    {
      var bindingElement = bindingCollection.ConfiguredBindings[0];
      var binding = (Binding)Activator.CreateInstance(bindingCollection.BindingType);
      binding.Name = bindingElement.Name;
      bindingElement.ApplyConfiguration(binding);

      return binding;
    }
  }

  return null;
}

قد يكون خيار واحد صفيق لإنشاء مثيل مع منشئ افتراضي، لاستخدامه كقالب:

Binding defaultBinding;
using(TestServiceClient client = new TestServiceClient()) {
    defaultBinding = client.Endpoint.Binding;
}

وثم دس هذا بعيدا وإعادة استخدامها. أي مساعدة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top