Я занимаюсь разработкой службы двунаправленного WCF namedpipe.Байт []/поток через namedPipe WCF сбой
Для основных вещей клиент и сервер общаются без проблем. Сервер может перенаправить клиент, отправляющий ему строки, и он делает это без каких-либо проблем. Но, когда я хочу, чтобы он отправил растровое изображение с байтом [] или потоком, все виновато. Просто заметьте, я попытался использовать поток, потому что байт [] не работает ... На стороне сервера байт []/поток генерируется без проблем. Но когда сервер отправляет байту []/stream клиенту, если байт []/stream пуст, он проходит, но когда он имеет данные, он неисправен.
Я уже проверил все свои конфигурации и попытался установить большой буфер/сообщение/poolize/stringcontent/arraylenght/byteperread/любой размер/длина, потому что я знаю, что это классическая проблема в WCF.
Ниже приведена C/P основной части моего файла конфигурации WCF.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding name="NamedPipeBinding_ICameraService" closeTimeout="00:05:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxConnections="10" maxBufferPoolSize="500000000" maxBufferSize="500000000" maxReceivedMessageSize="500000000">
<readerQuotas maxDepth="32" maxStringContentLength="500000000" maxArrayLength="500000000" maxBytesPerRead="500000000" maxNameTableCharCount="500000000"/>
<security mode="Transport"/>
</binding>
</netNamedPipeBinding>
</bindings>
<services>
<service name="EOSDigital.CameraService" behaviorConfiguration="MEX">
<endpoint address="net.pipe://localhost/EOSDigital/CameraService" binding="netNamedPipeBinding" bindingConfiguration="NamedPipeBinding_ICameraService" contract="EOSDigital.ICameraService"/>
<endpoint address="net.pipe://localhost/EOSDigital/CameraService/mex" binding="mexNamedPipeBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MEX">
<serviceMetadata httpGetEnabled="False"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Вот контракт на обслуживание обратного
[ServiceContract]
public interface ICameraServiceCallBack
{
[OperationContract(IsOneWay = true)]
void CallBackFunction(string str);
[OperationContract(IsOneWay = true)]
void LiveviewUpdated(byte[] img);
}
А вот заявление моего контракта службы.
[ServiceContract(CallbackContract = typeof(ICameraServiceCallBack))]
public interface ICameraService
Я не стану все, это слишком громоздко.
Это, как я использую его
private void CurrentCamera_LiveViewUpdated(object sender, Stream img)
{
MemoryStream data = new MemoryStream();
img.CopyTo(data);
_callback = OperationContext.Current.GetCallbackChannel<ICameraServiceCallBack>();
_callback.CallBackFunction("this is a test"); // ok
_callback.LiveviewUpdated(data.ToArray()); //Faulted
}
Я получаю поток от цифровой камеры Canon и вокруг байта [146242]. Когда я отправляю байт [10], он работает. Должно быть, проблема с размером, и я думаю, что я что-то пропустил в файле конфигурации ...
Я также попытался сгенерировать и посмотреть в файл scvclog моего сервиса, чтобы увидеть некоторые детали происходящего ошибочное исключение. Но, ну ... В одной строке есть не менее 50 тыс. Символов. Это невозможно прочитать.
Спасибо.
Спасибо! Я не знаю, как я мог это пропустить .... –