Запустите сервисную библиотеку WCF при запуске .exe в режиме отладки.

1

Когда я запускаю свой WPF, который использует мою библиотеку услуг WCF через визуальную студию, я получаю запуск WCF Service Host одновременно с моей службой, начиная с моей Библиотеки услуг WCF, однако, когда я нажимаю на exe для своего WPF в папке отладки, 't startup все равно, чтобы он начинался с кода, поскольку следующий код, который, как я полагал, будет работать, не работает.

try
{
    host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/"));
    host.Open();
}catch(AddressAlreadyInUseException)
{
}

Я пытаюсь не использовать ссылки на службы.

Теги:
wpf
wcf

2 ответа

0
Лучший ответ

Хорошо, ошибка была вдали от того места, где я думал, что это была ошибка, когда он работал на моем потоке пользовательского интерфейса, поэтому его нужно было добавить.

[ServiceBehavior( UseSynchronizationContext = false)]

Если у кого-то еще есть эта проблема, я надеюсь, что это поможет.

1

Я не эксперт в этом, но, возможно, вам не хватает привязки. Вот простой пример, который я могу создать для хостинга и использования службы WCF в коде (вам нужно будет добавить ссылки на System, System.Runtime.Serializaton и System.ServiceModel, но в остальном этот код будет завершен).

using System;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace ConsoleApplication1
{

   class Program
   {

      static void Main(string[] args)
      {

         // Create the host on a single class
         using
         (  ServiceHost host
          = new ServiceHost
            (  typeof(MyService)
            ,  new Uri("http://localhost:1234/MyService/MyService")
            )
         ){

            // That single class could include multiple interfaces to
            //  different services, each must be added here
            host.AddServiceEndpoint
            (  typeof(IMyService)
            ,  new WSHttpBinding(SecurityMode.None)
               // Each service can have it own URL, but if blank use the
               //  default above
            ,  ""
            );
            // Open the host so it can be consumed
            host.Open();

            // Consume the service (this cuold be in another executable)
            using
            (  ChannelFactory<IMyService> channel
               = new ChannelFactory<IMyService>
               (  new WSHttpBinding(SecurityMode.None)
               ,  "http://localhost:1234/MyService/MyService"
               )
            ){ IMyService myService = channel.CreateChannel();
               Console.WriteLine(myService.GetValue());
            }

            // Clean up
            host.Close();

         }


      }

   }

   [ServiceContract]
   public interface IMyService
   {  [OperationContract] int GetValue();
   }

   public class MyService : IMyService
   {  public int GetValue()
      {  return 5;
      }
   }

}
  • 0
    Я добавил в привязку, но она зависает и перестает отвечать на запросы в эквивалентном 'Console.WriteLine (myService.GetValue ()); "
  • 0
    @ZoomVirus Замораживается ли он в коде примера, который я отправил? Когда он замораживается в вашем эквивалентном коде, находится в бесконечном замораживании или истекает время ожидания. Есть ли у вас какие-либо исключения?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню