Выполненный WCF ServiceHost с несколькими контрактами

Я получил ту же ошибку после обновления mysql.

Ошибка была исправлена ​​после этой команды:

mysql_upgrade -u root

mysql_upgrade должен выполняться каждый раз при обновлении MySQL , Он проверяет все таблицы во всех базах данных на предмет несовместимости с текущей версией MySQL Server. Если найденная таблица имеет возможную несовместимость, она проверяется. Если обнаружены какие-либо проблемы, таблица будет восстановлена. mysql_upgrade также обновляет системные таблицы, чтобы вы могли использовать новые привилегии или возможности, которые могли быть добавлены.

51
задан Sam 2 December 2008 в 16:04
поделиться

5 ответов

Необходимо реализовать оба сервиса (интерфейсы) в том же классе.

servicehost = new ServiceHost(typeof(WcfEntryPoint));
servicehost.Open(); 

public class WcfEntryPoint : IMyService1, IMyService2
{
    #region IMyService1
    #endregion

    #region IMyService2
    #endregion
}
<час>

к вашему сведению: Я часто использую частичные классы, чтобы заставить мой класс хоста кодировать легче читать:

// WcfEntryPoint.IMyService1.cs
public partial class WcfEntryPoint : IMyService1
{
    // IMyService1 methods
}

// WcfEntryPoint.IMyService2.cs
public partial class WcfEntryPoint : IMyService2
{
    // IMyService2 methods
}
60
ответ дан chilltemp 7 November 2019 в 20:04
поделиться

Как насчет того, чтобы разделить его с помощью базового адреса и нескольких услуг / контрактов под ним? Я сейчас не занимаюсь разработкой, но что-то вроде:

http: // myserver / myservices / serviceA
http: // myserver / myservices / serviceB
http: // myserver / myservices / serviceC

Каждая служба реализует свой собственный ServiceContract.

Вы можете изменить
открытый класс WcfEntryPoint: IMyService1, IMyService2
на
открытый частичный класс WcfEntryPoint: IMyService1
открытый частичный класс WcfEntryPoint: 12107Service2 [

1
ответ дан 7 November 2019 в 10:04
поделиться

В настоящее время я столкнулся с той же проблемой, и решил воспользуйтесь реализацией ниже. Я не уверен, есть ли какие-либо проблемы с производительностью при наличии такого количества контрактов на обслуживание, но в моей окончательной реализации у меня, вероятно, будет около 10-15 контрактов на обслуживание, то есть около 10-15 ServiceHosts.

Я размещаю все свои WCF служб внутри одной службы Windows.

private void PublishWcfEndpoints()
{
    var mappings = new Dictionary<Type, Type>
    {
       {typeof (IAuthenticationService), typeof (AuthenticationService)},
       {typeof(IUserService), typeof(UserService)},
       {typeof(IClientService), typeof(ClientService)}
    };


    foreach (var type in mappings)
    {
        Type contractType = type.Key;
        Type implementationType = type.Value;

        ServiceHost serviceHost = new ServiceHost(implementationType);
        ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(contractType, ServiceHelper.GetDefaultBinding(),
                                                                  Properties.Settings.Default.ServiceUrl  + "/" + contractType.Name);
        endpoint.Behaviors.Add(new ServerSessionBehavior());

        ServiceDebugBehavior serviceDebugBehaviour =
            serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
        serviceDebugBehaviour.IncludeExceptionDetailInFaults = true;

        log.DebugFormat("Published Service endpoint: {0}", Properties.Settings.Default.ServiceUrl);

        serviceHost.Open();
        serviceHosts.Add(serviceHost);
    }

}

Не стесняйтесь комментировать этот тип настройки, и если есть какие-либо проблемы с ним, особенно связанные с производительностью.

17
ответ дан 7 November 2019 в 10:04
поделиться

ответ перца чили будет работать, если Вы согласитесь с контрактами, совместно используемыми сервисом. Если Вы хотите, чтобы они были разделены, пробуют это:

host1 = new ServiceHost(typeof(MyService1));
host2 = new ServiceHost(typeof(MyService2));

host1.Open();
host2.Open();

public class MyService1 : IMyService1
{
    #region IMyService1
    #endregion
}

public class MyService2 : IMyService2
{
    #region IMyService2
    #endregion
}

Редактирование: Как Матовое отправленный, это потребовало бы нескольких конечных точек для каждого сервиса/контракта

6
ответ дан Chris Porter 7 November 2019 в 20:04
поделиться

Этот ответ является дальнейшим ответом на комментарий в принятом ответе от chilltemp.

Sam, действительно необходимо определить, почему Вы нуждаетесь в 10-50 контрактах и пытаетесь найти другое решение. Я просмотрел WCF Juval Lowy Кодирование Стандартов (найденный на http://www.idesign.net/ ) и нашел следующие ссылки:

3 Контракта ... 4 на Обслуживание. Избегайте контрактов с одним участником. 5. Стремитесь иметь трех - пять участников на контракт на обслуживание. 6. Не имейте больше чем двадцати участников на контракт на обслуживание. Двенадцать, вероятно, практический предел.

Он не упоминает предел на реализации контракта (что я могу найти), но я не могу вообразить его просматривающий 50 контрактов на сервисе как ничто напоминающее лучшую практику. Одно решение я нашел, что работы хорошо должны использовать участника, совместно использующего для подобных функций.

, Например, при использовании сервиса WCF выполнить математику на 2 значениях у Вас могло бы быть 4 участника на сервисной стороне: Добавьте (x, y), Вычтите (x, y), Умножьтесь (x, y), Разделитесь (x, y). Если Вы комбинируете их в более универсального участника и используете объект передать необходимые данные, можно легко уменьшить членское количество и увеличить масштабируемость. Пример: PeformCalculation (obj), где obj имеет x, y, и действие (добавляют, вычитают, умножаются, делятся), свойства.

Hope это помогает.

10
ответ дан Chris Porter 7 November 2019 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: