Интересная проблема с WCF wsHttpBinding через Брандмауэр

просто поместите ваш цикл while внутри CoRoutine, и пока ваш запрос не будет обработан до возврата дохода. когда это будет сделано, вызовите метод, в котором вы хотите использовать свои данные:

IEnumerator MyMethod()
{
    var reader = new WWW(filePath);
    while (!reader.isDone) 
    { 
        yield return; // <- use endofFrame or Wait For ore something else if u want
    }
    LoadingDoneDoData(reader.bytes);
}

void LoadingDoneDoData(bytes[] data)
{
    // your Code here
}
5
задан Enrico Campidoglio 6 February 2012 в 09:26
поделиться

3 ответа

Вы могли бы попытаться украсить свой класс обслуживания:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
6
ответ дан 13 December 2019 в 05:43
поделиться

Я не знаю о решении от Mitch Baker, никогда не пробовал его. Но это включает изменение сгенерированного кода. Существует другой способ обойти это.

Я предполагаю, что Вы сгенерировали клиентский код с помощью svcutil.exe, дав адрес MEX, который указывает на брандмауэр. Когда Вы делаете это, вся необходимая конфигурация добавляется к App.config (или Web.config). Однако адрес сервиса в конфигурации укажет на реальный сервисный адрес (поскольку в WSDL регистрируют адрес сервисного подоконника быть адресом реального сервиса).

Так, что я думаю, решит эту проблему:

  1. Сгенерируйте клиентский код путем предоставления адреса MEX (например: http://:Port-X/service/wcfservice.svc?wsdl). Это будет, генерировал всю необходимую конфигурацию.

  2. При вызове клиентского конструктора дайте URI брандмауэра как EnpointAddress и название конфигурации сгенерированной конфигурации. Таким образом, клиент отправит сообщение, как будто оно отправляло его службе, но адресу брандмауэра:

    клиент = новый ServiceClient (endpointConfigName, новая Система. ServiceModel. EndpointAddress ("http://:Port-X/service/wcfservice.svc"));

2
ответ дан 13 December 2019 в 05:43
поделиться

Более безопасный способ справиться с этим - установить ListenUri конечной точки на URL-адрес службы, а адрес конечной точки - на внешнюю конечную точку, куда клиенты отправляют сообщения. Таким образом, служба «доверяет» сообщениям, направленным только на этот адрес, а не только на ЛЮБОЙ адрес.

4
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

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