WCF Webservice для отправки и получения байтов bigt [] - PullRequest
2 голосов
/ 18 сентября 2010

Я прочитал множество постов по этому поводу и получил противоречивую информацию - я пытаюсь «свести к минимуму» ряд вопросов, которые другие задавали в надежде, что где-то в сети найдется хороший четкий ответ :-)

Я пишу .NET-приложение для моего ПК, которое подключается к веб-серверу IIS под управлением ASP.NET.Веб-сервер имеет два метода, похожих на:

[WebMethod]
public byte [] GetFile(string file)
{
    // simplified 
    return File.ReadAllBytes(file);
}

[WebMethod]
public void PutFile(string file, byte [] data)
{
    // simplified 
    return File.WriteAllBytes(file, data);
}

На клиенте я бы хотел вызвать GetFile / PutFile, используя буферы размером около 4 МБ.

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
binding.AllowCookies = true;
binding.OpenTimeout = ???;
binding.MaxBufferSize = ???;
binding.MaxReceivedMessageSize = ???;
onlineTransport = new RemoteObject.RemoteObjectSoapClient(binding, new EndpointAddress(BaseUrl + "/page.asmx"));

// Read a file
byte [] foo = onlineTransport.GetFile("foo.file");

// Write a file
onlineTransport.PutFile("bar.file", foo);

Требования

  1. Должен быть веб-сервисом .NET - с SSL и без него
  2. Должен иметь двоичную кодировку для сокращения объема данных, передаваемых через Интернет
  3. 4 МБ - верхняя граница для размера данных
  4. Настройки кода предпочтительнее {web / app} .config - мне нравится все в одном месте

Вопросы

  1. ENCODINGS: я буду отправлять их много, и важно количество байтов, передаваемых по проводам - ​​возможно ли использовать двоичную кодировку сообщений или кодировку MTOM во времяиспользование веб-сервиса по HTTP?

  2. НАСТРОЙКИ: Когда я передаю, возникает ряд максимальных значений запроса и времени ожидания.Я хотел бы понять, что я делаю и как установить их в коде (не файлы .config).GREAT - это модель слоя (jpeg), которая показывает, где применяются каждое из значений времени ожидания и максимальных значений.Например, отправка большого массива через SOAP отличается от максимального размера сообщения.

  3. STREAMING / BUFFERING: Если двоичные двоичные объекты имеют размер <4 МБ, нужна ли потоковая передача?данные легко читаются / записываются из файловой системы, данные не создаются на лету.Если попадание памяти составляет всего 4 МБ, я более чем счастлив, я обеспокоен тем, что 4 МБ могут всплыть после различных буферов?- Я бы хотел лучше понять, что происходит </p>

некоторые материалы исследования: http://msdn.microsoft.com/en-us/library/ms733742.aspx

1 Ответ

0 голосов
/ 18 сентября 2010

На основании вашего кода вы используете веб-сервис ASP.NET, поэтому вы не можете использовать MTOM, двоичное кодирование или потоковую передачу.

Для службы WCF:

  1. Да. MTOM может использоваться для BasicHttpBinding, а двоичное кодирование может использоваться для настраиваемого связывания через транспорт HTTP. Но двоичное кодирование делает ваш сервис не совместимым. Только клиенты WCF смогут звонить в вашу службу.
  2. Да, есть много тайм-аутов, и все они хорошо описаны на MSDN .
  3. Это зависит от ожидаемого количества одновременных запросов и способа обработки сообщения. Если вы ожидаете 100 одновременных запросов, в вашем буфере будет 400 МБ. Опять же, потоковая передача возможна для BasicHttpBinding, но она требует изменения ваших операций.
...