WCF и несколько заголовков хоста

В igraph веса - это атрибуты ребер, которые представляют собой трение или стоимость перемещения этого ребра в полутоне, а не пропускную способность или . полоса пропускания края. Малый вес обеспечивает низкую весовую сумму пути, а get.shortest.paths() возвращает путь с наименьшей весовой суммой при запуске без отключения весов на взвешенном графике.

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

library(igraph)

# Colours for the weighted edges
N <- 22
set.seed(7890123)

# Make a random graph with randomly weighted edges coloured in gray
g <- erdos.renyi.game(N, .2, type="gnp", directed=F, loops=F, weighted=T)
E(g)$weight <- sample(1:40, length(E(g)), replace=T)
#E(g)$weight <- E(g)$weight/10
E(g)$color <- "gray"
V(g)$size <- 4
V(g)$size[c(1,N)] <- 12

# Look how the shortest path is calculated differently when taken the graph weihgt into acocunt
(weighted.path <- unlist(get.shortest.paths(g, 1, N)$vpath) )
(unweighted.path <- unlist(get.shortest.paths(g, 1, N, weights=NA)$vpath) )

# Set weights and colours of shortest paths to visualise them
E(g, path=weighted.path)$color <- "red"
E(g, path=unweighted.path)$color <- "green"

# plot the graph with red shortest weighted path, and green shortest path
same.sahpe <- layout_with_fr(g)
plot(g, vertex.color="white", vertex.label=NA, edge.weight=2, edge.width=(E(g)$weight/5), layout=same.sahpe)

# The two paths look like this. Even though path-length might be longer, a weighted
# shortest path is determined using the sum of path-weights. As with path-lengths, the
# lowest value is the path most easily travelled by. In this case, the weighted alternative
# has a longer path but with lower friction.
data.frame(path.length=c(length(weighted.path),
                        length(unweighted.path)
                        ),
           weight.sum=c(sum(E(g, path=unlist(weighted.path))$weight),
                        sum(E(g, path=unlist(unweighted.path))$weight)
           )
)

Посмотрите, что кратчайший невзвешенный путь между двумя большими вершинами имеет длину 4, но проходит по довольно густо взвешенным зеленым краям. Кратчайший взвешенный путь имеет самую низкую весовую сумму и проходит больше шагов (5), но проходит по клиньям с меньшим весом, что приводит к более низкой весовой сумме или более низкой стоимости поездки по парту, если хотите. [ 1111]

enter image description here

10
задан Ryu 12 January 2009 в 15:09
поделиться

4 ответа

Если Вы не помещаете адрес в конечную точку затем, она должна разрешить к любым хитам сервера сервис. Я использую этот код, и он решает и к моему адресу .local и к моему адресу .com от IIS.

<system.serviceModel>
    <services>
        <service name="ServiceName" behaviorConfiguration="ServiceName.Service1Behavior">
            <endpoint address="" binding="wsHttpBinding" contract="iServiceName">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceName.Service1Behavior">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
5
ответ дан 4 December 2019 в 00:27
поделиться

Я уверен, что Вы поняли это к настоящему времени, но только для забавы я отправлю здесь так или иначе.

Я имел эту точную проблему и потратил навсегда попытку понять это. Лучшее решение состоит в том, чтобы поместить базовые адреса хоста в Ваше сервисное определение, которое позволяет сервису работать под этими несколькими адресами. Для этого решения работать, Вам все еще нужен ServiceHostFactory, который будет переопределен. Так как Вы уже сделали это, просто оставьте его там.

<service behaviorConfiguration="ServiceBehaviour" name="Api.Service">
    <endpoint address="soap" binding="basicHttpBinding" contract="Api.IService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://host1.com/Api" />
        <add baseAddress="http://host2.com/Api" />
      </baseAddresses>
    </host>
  </service>
-1
ответ дан 4 December 2019 в 00:27
поделиться

Я не думаю, что решение базовых адресов хоста , опубликованное выше, будет работать для веб-сайтов, размещенных на IIS (OP действительно упомянул, что это было для его работодателя веб-сайт ).

См. это сообщение в блоге

Кроме того, другой ответ далее thaBadDawg не будет работать, если указано несколько заголовков хоста - вы просто получите ошибки, упомянутые OP («Эта коллекция уже содержит адрес со схемой http».)

Я не думаю, что какое-либо из упомянутых до сих пор решений будет работать, потому что не похоже, что WCF позволяет использовать одну службу чтобы быть доступным для одного сайта с несколькими заголовками хоста со всех сайтов. Единственный обходной путь, который я мог найти для .Net 3.5 (и ниже), - это создать разные контракты для каждого из заголовков хоста, и используйте настраиваемый ServiceHostFactory для использования правильного заголовка узла в зависимости от того, какой контракт указан. Это совсем не практично. Очевидно .Net 4.0 решит эту проблему .

5
ответ дан 4 December 2019 в 00:27
поделиться

Естественно инкапсулировать «Периоды» с образцом команд (что в основном и было сделано). Но вы сталкиваетесь с двумя проблемами: -

1) Вы должны перекомпилировать, чтобы добавить больше периодов

  • Вы можете перечислить все возможные действие, которое возможно для периода взять, затем определить периоды в некоторых внешний формат (XML, база данных), загружается в приложение на запуск. Западные RPG, как правило, кодируются как это - "период" состоит из "Применить эффект периода # 1234 с параметром 1000 ", «play animation # 2345» и т. д.

  • Вы можете открыть для своего игрового объекта сценарий язык и сценарий периодов (можно также объединить это с первой идеей, чтобы в большинстве случаи, когда написанные по сценарию периоды просто вызывают предопределенные эффекты в коде). Поединок планезвалкеров (игра M: TG на X-Box 360) была написана широко с этот подход

  • Или вы можете просто жить с ним (я делаю...)

2) Что происходит, когда ваш период цель не существо?

  • Если вы выставляете свое игровое имущество своим периодам сценариям, это не проблема, потому что ваши сценарии могут делать все, что им нравится, в контексте того, что вы выставляете.

  • В противном случае лучше всего создать общий тип.

Я обычно делаю что-то вроде следующего (и не только в играх, я также использовал этот тип образца для представления поведения в mutli-agent-системах): -

public interface IEffect<TContext>
{
  public void Apply(TContext context);
}

public class SingleTargetContext
{
  public Creature Target { get; set; }
}
public class AoEContext
{
  public Point Target { get; set; }
}
// etc.

Преимущество этого образца в том, что он действительно гибок для выполнения тех «странных» вещей, на которые вы часто ожидаете, что периоды смогут сделать, что более фиксированные модели не будут способны. Вы можете делать такие вещи, как связывать их вместе. Вы можете иметь Эффект, который добавляет Эффект Effect к вашей цели - хорошо для того, чтобы сделать что-то вроде Терновая Аура. Для представления буферов можно использовать IReversibleEffect (с дополнительным методом Unapply).

Эта статья о Дуэли Планезвалкеров действительно превосходно читать, хотя. Так хорошо, что я свяжу это дважды!

-121--2970308-

Нет, это:

Guid? foo = new Guid(myString);

Существует неявное преобразование из T в Null < T > - вам не нужно делать ничего особенного. Или если вы не находитесь в ситуации, когда неявное преобразование будет работать (например, вы пытаетесь вызвать метод, который имеет перегрузки как для типов, допускающих, так и не допускающих значения NULL), вы можете привести его:

(Guid?) new Guid(myString)
-121--2913848-

Я встретил эту проблему несколько дней назад. На самом деле у меня та же ситуация, которую Рю описал изначально в своем вопросе. У нас есть один виртуальный каталог для многих клиентов, но каждый из них имеет свою собственную привязку. Подобно « http://company1.product.com », « http://company2.product.com » и т.д.

Решение, описанное здесь , работает . Но какова цена! Мы должны изменять web.config каждый раз, когда нам нужно добавить новую привязку. А также web.config должен содержать абсолютный префикс пути например, < add prefix = «http://company1.product.com »/> .

Можно обойти первую проблему. Я написал свой собственный CustomHostFactory для сервиса WCF,где я динамически добавляю конечные точки. И это конечные точки, которые я получаю из привязок IIS (есть способ получить информацию из IIS).

Вот пример кода:

protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
    var serviceHost = base.CreateServiceHost(serviceType, baseAddresses);
    var webHttpBinding = new WebHttpBinding();
    var serviceEndpoint1 = serviceHost.AddServiceEndpoint(typeof(IService), webHttpBinding,
                                                         "http://company2.product.com/WCFService/Service.svc");

    var serviceEndpoint2 = serviceHost.AddServiceEndpoint(typeof(IService), webHttpBinding,
                                                 "http://company1.product.com/WCFService/Service.svc");

    var webHttpBehavior = new WebHttpBehavior();

    serviceEndpoint1.Behaviors.Add(webHttpBehavior);
    serviceEndpoint2.Behaviors.Add(webHttpBehavior);

    return serviceHost;
}

Вместо жесткого кодирования URL-адресов конечных точек их можно извлечь из IIS. Но ServiceHost создается один раз при запуске приложения. Поэтому при необходимости добавления новой привязки необходимо перезапустить IIS. Это не решение для нас.

Поэтому мы решили перейти в asmx (как описано здесь ). И дождитесь выпуска Framework 4.0, где должно поддерживаться несколько привязок.

3
ответ дан 4 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

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