Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / webservice через tcp/ip / 25 сообщений из 37, страница 1 из 2
10.04.2012, 08:52
    #37746141
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
Net2
webservice через tcp/ip
можно ли реализовать такое и как ?
...
Рейтинг: 0 / 0
10.04.2012, 11:19
    #37746429
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
Смотрите в сторону WCF.

И задачу подробнее опишите, не совсем понятно что вы хотите сделать.
...
Рейтинг: 0 / 0
10.04.2012, 11:44
    #37746504
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael RNet2
webservice через tcp/ip
можно ли реализовать такое и как ?

вебсервисы и работают через tcp/ip.
...
Рейтинг: 0 / 0
13.04.2012, 01:03
    #37751519
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
надо что бы запросы были не через http а именно через tcp/ip
WCF нету поскольку NET2
...
Рейтинг: 0 / 0
13.04.2012, 09:21
    #37751709
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael R,

TCP/IP = "Туева Хуча Протоколов",

Что нужно конкретно?
...
Рейтинг: 0 / 0
13.04.2012, 10:08
    #37751801
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
честно говоря не знаю что конкретно

установка гласит так :
данные должны передаваться не как текст , а как бинарный набор
соответствено должна быть сереализация этого набора при приёме данных

вот такое надо сделать через WebService в Net2
...
Рейтинг: 0 / 0
13.04.2012, 10:54
    #37751904
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael R,

Короче, если файлы не очень большие, делаешь так:

говнокод:
веб служба
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        [WebMethod]
        public byte[] GetFile(string filename)
        {
            BinaryReader binReader = new BinaryReader(File.Open(Server.MapPath("~/" + filename), FileMode.Open, FileAccess.Read));
            binReader.BaseStream.Position = 0;
            byte[] binFile = binReader.ReadBytes(Convert.ToInt32(binReader.BaseStream.Length));
            binReader.Close();
            return binFile;
        }

        [WebMethod]
        public void PutFile(byte[] buffer, string filename)
        {
            BinaryWriter binWriter = new BinaryWriter(File.Open(Server.MapPath("~/" + filename), FileMode.CreateNew, FileAccess.ReadWrite));
            binWriter.Write(buffer);
            binWriter.Close();
        }


тестовая страница
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
...
<title>Тест службы</title>
    <script language="javascript" type="text/javascript">
<!--

        function Button1_onclick()
        {
            MyProject.Services.MyService.GetFile('исходный файл.docx', function(data)
            {
                //alert(data);
            })
        }

        var bin = []

        function Button2_onclick()
        {
            MyProject.Services.MyService.PutFile(bin,'новый файл.docx', function(data)
            {
                //alert(data);
            })
        }

// -->
    </script>
</head>
<body>
    <form id="form1" runat="server" enctype="multipart/form-data">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/services/myservice.asmx" />
        </Services>
    </asp:ScriptManager>
    <div>
        <h3>
            Работа с файлами</h3>
        <p>
            <input id="Button1" type="button" value="Get file" onclick="return Button1_onclick()" />
            <input id="Button2" type="button" value="Put file" onclick="return Button2_onclick()" /></p>
    </div>
    </form>
</body>
</html>


Метод GetFile пришлет типа {"d":[80, 75, 3, 4, 20, 0, 6, 0, 8, 0, 0, 0, ...... ]} . Если скопировать этот массив в bin (для Button2_onclick()):
var bin = [80, 75, 3, 4, 20, 0, 6, 0, 8, 0, 0, 0, ...... ]
то появится новый, идентичный исходному файл.

Дерзай - более ничем помочь не могу, телепатией не обладаю...

ПС : Ессно, MyProject.Services.MyService будет у тебя свое...
...
Рейтинг: 0 / 0
13.04.2012, 11:01
    #37751923
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
ок спасибо

попробуем
только у нас не файлы , но это уже не столь важно
...
Рейтинг: 0 / 0
13.04.2012, 11:07
    #37751951
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael R,

Скажу сразу, что мой пример идет в разрез с требованиями - это как раз передача текста, причем в JSON формате.
Есть бинарный XML, но я с ним никогда не сталкивался.
...
Рейтинг: 0 / 0
13.04.2012, 11:22
    #37751990
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
Насколько я понимаю, вэбсервисы всегда, так или иначе, передают данные в текстовом виде. Хотя, может имелся ввиду base64?
...
Рейтинг: 0 / 0
13.04.2012, 11:28
    #37752001
iConst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael Rчестно говоря не знаю что конкретно

установка гласит так :
данные должны передаваться не как текст , а как бинарный набор
соответствено должна быть сереализация этого набора при приёме данных

вот такое надо сделать через WebService в Net2Только сейчас задумался - при чем тут тогда веб-сервисы? Веб службы и были задуманы для передачи всякого именно через 80 порт - HTTP протокол, как наиболее распространенного.
...
Рейтинг: 0 / 0
13.04.2012, 12:35
    #37752196
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
iConstmichael Rчестно говоря не знаю что конкретно

установка гласит так :
данные должны передаваться не как текст , а как бинарный набор
соответствено должна быть сереализация этого набора при приёме данных

вот такое надо сделать через WebService в Net2Только сейчас задумался - при чем тут тогда веб-сервисы? Веб службы и были задуманы для передачи всякого именно через 80 порт - HTTP протокол, как наиболее распространенного.
Тем более, всё, что не через http не называется вэбом.
...
Рейтинг: 0 / 0
13.04.2012, 14:07
    #37752464
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
iConst Только сейчас задумался - при чем тут тогда веб-сервисы? Веб службы и были задуманы для передачи всякого именно через 80 порт - HTTP протокол, как наиболее распространенного.

во-во
мы не ищем лёгких путей
вернее нас заставляют их искать.......
...
Рейтинг: 0 / 0
13.04.2012, 14:35
    #37752568
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
michael Rво-во
мы не ищем лёгких путей
вернее нас заставляют их искать.......Использовать .Net Remoting или WSE?
...
Рейтинг: 0 / 0
12.05.2012, 14:54
    #37791129
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
Будет ли работать под IIS в WCF привязка NetTcpBinding или NetNamedPipeBinding?
Или под IIS только привязки на основе HTTP?
...
Рейтинг: 0 / 0
12.05.2012, 15:09
    #37791159
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
...
Рейтинг: 0 / 0
12.05.2012, 16:28
    #37791325
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
МСУ , я же не об этом.

можно ли в asp.net приложение(не с помощью службы windows) создать WCF Service с привязкой NetTcpBinding или NetNamedPipeBinding?
Т.е. чтобы всё работало под IIS.

P.S. судя по всему нельзя :(
...
Рейтинг: 0 / 0
12.05.2012, 16:36
    #37791338
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
AHTOH_L МСУ , я же не об этом.

можно ли в asp.net приложение(не с помощью службы windows) создать WCF Service с привязкой NetTcpBinding или NetNamedPipeBinding?
Т.е. чтобы всё работало под IIS.

P.S. судя по всему нельзя :(

А я не Вам отвечал. По вопросу точно не скажу, может через какой изврат через одно место и можно так сделать. Но не нужно.
Базовые принципы для адекватного SOA на WCF: WCF должен хоститься в отдельной независимой песочнице - Windows службе , в IIS'е ему делать нечего.
...
Рейтинг: 0 / 0
13.05.2012, 10:32
    #37791896
SOA на WCF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
МСУ > SOA на WCF: WCF должен хоститься в отдельной независимой песочнице - Windows службе, в IIS'е ему делать нечего

На счет независимой, согласен. Но почему "в IIS`e ему делать нечего" ?
...
Рейтинг: 0 / 0
13.05.2012, 12:01
    #37791984
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
SOA на WCFНа счет независимой, согласен. Но почему "в IIS`e ему делать нечего" ?
Потому, что IIS - это уже зависимость со всеми вытекающими. Начнутся серьезные проблемы при трансфере больших файлов, например.
...
Рейтинг: 0 / 0
13.05.2012, 13:08
    #37792037
timda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
МСУSOA на WCFНа счет независимой, согласен. Но почему "в IIS`e ему делать нечего" ?
Потому, что IIS - это уже зависимость со всеми вытекающими. Начнутся серьезные проблемы при трансфере больших файлов, например.

Проблемы начинаются тогда, когда разработчики считают что они умнее Майкрософт.
...
Рейтинг: 0 / 0
13.05.2012, 13:55
    #37792064
webservice через tcp/ip
МСУSOA на WCFНа счет независимой, согласен. Но почему "в IIS`e ему делать нечего" ?
Потому, что IIS - это уже зависимость со всеми вытекающими. Начнутся серьезные проблемы при трансфере больших файлов, например.

Property MaxRequestLength
Type: System.Int32
The maximum request size in kilobytes. The default size is 4096 KB (4 MB).
Код: c#
1.
2.
// Set the MaxRequestLength property value to 10240 kilobytes.
configSection.MaxRequestLength = 10240;
...
Рейтинг: 0 / 0
13.05.2012, 20:16
    #37792295
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
timdaПроблемы начинаются тогда, когда разработчики считают что они умнее Майкрософт.
Проблемы начинаются тогда, когда разработчики не читают рекомендации Майкрософт: Рекомендации по размещению в службах IIS

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

...По умолчанию сообщения, отправляемые в службу WCF, которая размещается в службах IIS 6.0 и более ранних версий, обрабатываются в синхронном режиме. ASP.NET вызывает WCF в собственном потоке (рабочий поток ASP.NET), а WCF использует для обработки запроса другой поток. WCF удерживает рабочий поток ASP.NET до завершения обработки. В результате обработка запросов выполняется синхронно. Асинхронная обработка запросов расширяет возможности масштабирования, поскольку в этом случае сокращается число потоков, необходимое для обработки запроса, — WCF не удерживает поток ASP.NET в течение обработки запроса. Асинхронный режим не рекомендуется для компьютеров со службами IIS 6.0, поскольку в этой версии отсутствует возможность регулирования входящих запросов и сервер становится уязвимым к атакам типа Отказ в обслуживании.

Далее, читаем Application Architecture Guide v2.

Руководство MICROSOFT по проектированию архитектуры приложений
Определите стратегию связи с другими слоями.
...
Если бизнес-логика или логика доступа к данным будет использоваться слоем представления в рамках внутренней сети, используйте WCF-службу, работающую по протоколу TCP. Если бизнес-логика или логика доступа к данным будет использоваться слоем представления через Интернет, используйте WCF-службу, работающую по протоколу HTTP. Если в бизнес-логике или логике доступа к данным предполагаются длительные вызовы, реализуйте асинхронную связь с помощью WCF и очереди сообщений.



И на закуску: Размещение и использование служб Windows Communication Foundation

Размещение в службах Windows...Размещение службы WCF в службе Windows является логичным выбором.

Вот преимущества данного подхода.

Автоматический запуск. Диспетчер управления службами Windows позволяет выбрать автоматический тип запуска, чтобы при запуске Windows служба запускалась без использования диалога регистрации на компьютере.

Восстановление. В диспетчере управления службами Windows имеется встроенная поддержка для повторного запуска служб в случае возникновения сбоев.

Удостоверение безопасности. Диспетчер управления службами Windows позволяет выбирать конкретное удостоверение безопасности, в рамках которого должна запускаться служба, включая встроенные системные или сетевые учетные записи службы.

Управляемость. В общем случае операторы Windows хорошо осведомлены о возможностях диспетчера управления службами и других средств управления, работающих с процедурами установки и настройки служб Windows. Это способствует внедрению служб Windows в производственные среды; однако, чтобы обеспечить удобную поддержку служб, возможно, придется добавить некоторые инструментальные средства и компоненты для ведения журналов.

Поддержка всех привязок и транспортов. Размещение на собственном сервере никоим образом не ограничивает возможностей использования исходных привязок и транспортов. В Windows XP и Windows Server 2003 сервер IIS требует только обязательного использования HTTP.
...
Рейтинг: 0 / 0
13.05.2012, 20:21
    #37792301
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webservice через tcp/ip
Потому, что IISМСУпропущено...

Потому, что IIS - это уже зависимость со всеми вытекающими. Начнутся серьезные проблемы при трансфере больших файлов, например.

Property MaxRequestLength
Type: System.Int32
The maximum request size in kilobytes. The default size is 4096 KB (4 MB).
Код: c#
1.
2.
// Set the MaxRequestLength property value to 10240 kilobytes.
configSection.MaxRequestLength = 10240;



Не всё так просто. WCF Streaming under IIS consuming large amounts of server memory

...Thanks for the suggestion. I did start to implement the yield return but didn't manage to get it completed. I ran into issues around how to break up the file and then reconstitute it at the other end. Just seemed like I would have to write a lot of code, similar to manually chunking the file.

In the end I got my proof-of-concept up and running with streaming, but NOT OVER IIS. I ended up manually hosting the service using a windows service. I am using net tcp transfer, and streaming is working like a charm.

Thanks to all who contributed here. Any more thoughts please let me know!
...
Рейтинг: 0 / 0
13.05.2012, 21:05
    #37792328
webservice через tcp/ip
МСУ,

When you host your service under IIS, no matter if you enable streaming or not, your service will buffer the entire message prior to sending it.
The reason for this, is that it appears as though WCF does not set the Response.BufferOutput to "false" (default is true), when streaming is enabled on a service.
This seems to be an oversight in my opinion, that could be rectified in the framework code.
So the good news is, there is a way around this issue:

Since we want to somehow set that Response.BufferOutput to false, we need to get at the HttpContext. The flexibility of WCF comes to our aid here with the ability to enable AspNet Compatibility Mode, there are 3 changes we need to make to the service, to work around this issue.

1) Add the following attribute to your service:
Код: c#
1.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]


2) Inside the default constructor for your service, or wherever you want to set the bufferoutput property paste this code:

Код: c#
1.
2.
3.
4.
5.
6.
HttpContext httpContext = HttpContext.Current;
 
if (httpContext != null)
{
    httpContext.Response.BufferOutput = false;
}



3) Inside <system.serviceModel> place the following tag

Код: c#
1.
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / webservice через tcp/ip / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]