![]() |
![]() |
![]() |
|
Подключение к веб сервису 1С из платформы Windows Phone | ☑ | ||
---|---|---|---|---|
0
ditron
18.12.13
✎
12:15
|
Добрый день, уважаемые!
Подскажите, кто нибудь сталкивался с подключением и обменом с веб сервисом 1С 8.2 из приложения написанного под Windows Phone (VS) |
|||
1
Balonbl4
18.12.13
✎
12:23
|
А что, есть какие-то подводные камни?
ЗЫ: недавно делал синхронизацию с Eхchange по веб-сервисам - вот там реально жесть. |
|||
2
Serginio1
18.12.13
✎
12:26
|
||||
3
ditron
18.12.13
✎
12:50
|
Да все как у Калиновского, но! сервис по https находится
|
|||
4
Serginio1
18.12.13
✎
12:52
|
Тебе лучше сюда вопрос задать http://www.rsdn.ru
|
|||
5
ditron
18.12.13
✎
12:53
|
может у меня уже глаз замылился, вот код:
namespace AxorMobileClient { public partial class MainPage : PhoneApplicationPage { const string wsUser = "********"; const string wsPwd = "********"; public string User; public string Pwd; public WSMobileClientPortTypeClient _WSClient = new WSMobileClientPortTypeClient(); // Конструктор public MainPage() { InitializeComponent(); User = IsolatedStorageSettings.ApplicationSettings.LoadSetting("User", ""); Pwd = IsolatedStorageSettings.ApplicationSettings.LoadSetting("Pwd", ""); _WSClient.OpenCompleted += new EventHandler<AsyncCompletedEventArgs>(_WSClient_OpenCompleted); _WSClient.CheckConnectionCompleted += new EventHandler<CheckConnectionCompletedEventArgs>(_WSClient_CheckConnectionCompleted); _WSClient.GetClientInfoCompleted += new EventHandler<GetClientInfoCompletedEventArgs>(_WSClient_GetClientInfoCompleted); _WSClient.GetTreeOrdersCompleted += new EventHandler<GetTreeOrdersCompletedEventArgs>(_WSClient_GetTreeOrdersCompleted); _WSClient.GetRestGoodsCompleted += new EventHandler<GetRestGoodsCompletedEventArgs>(_WSClient_GetRestGoodsCompleted); _WSClient.ClientCredentials.UserName.UserName = wsUser; _WSClient.ClientCredentials.UserName.Password = wsPwd; _WSClient.OpenAsync(); } private void _WSClient_OpenCompleted(object sender, AsyncCompletedEventArgs e) { MessageBox.Show("Opened"); } // CheckConnection() private void WSCheckConnection(string User, string Pwd) { _WSClient.CheckConnectionAsync(User, Pwd); } // EventHandler of CheckConnection private void _WSClient_CheckConnectionCompleted(object sender, CheckConnectionCompletedEventArgs e) { throw new NotImplementedException(); } // GetClientInfo() private void WSGetClientInfo(string User, string Pwd) { //_WSClient.OpenAsync(); _WSClient.GetClientInfoAsync(User, Pwd); } // EventHandler of GetClientInfo void _WSClient_GetClientInfoCompleted(object sender, GetClientInfoCompletedEventArgs e) { ClientInfo.Text = e.Result; } // GetTreeOrders() private void WSGetTreeOrders(string User, string Pwd) { //_WSClient.OpenAsync(); _WSClient.GetTreeOrdersAsync(User, Pwd, null, null); } // EventHandler of GetTreeOrders void _WSClient_GetTreeOrdersCompleted(object sender, GetTreeOrdersCompletedEventArgs e) { //TextBlock1.Text = e.Result; } // GetRestGoods() private void WSGetRestGoods(string User, string Pwd) { _WSClient.GetRestGoodsAsync(User, Pwd, false); } // EventHandler of GetRestGoods void _WSClient_GetRestGoodsCompleted(object sender, GetRestGoodsCompletedEventArgs e) { //TextBlock1.Text = e.Result; } private void btnUpdate_Click(object sender, EventArgs e) { switch (pPanel.SelectedIndex) { case 0: { WSGetClientInfo(User, Pwd); break; } case 1: { WSGetRestGoods(User, Pwd); break; } case 2: { WSGetTreeOrders(User, Pwd); break; } } } private void miSettings_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("/SettingsPage.xaml", UriKind.Relative)); } } } |
|||
6
ditron
18.12.13
✎
13:00
|
то 1
Судя по всему есть |
|||
7
Serginio1
18.12.13
✎
13:24
|
||||
8
ditron
18.12.13
✎
13:48
|
7 - спасибо конечно, но это установка сертификата на симулятор, а я отлаживаю на реальном девайсе. У меня в исключении ругается не на сертификат.
Сначала ругался "The remote server returned an unexpected response: (401) Unauthorized. In Silverlight, a 404 response code may be reported even when the service sends a different error code.", потом включил на IIS-е (где служба опубликована) ASP.NET Impersonation , теперь другая ругань в дебаге: "The content type text/html of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>\r\n<title>500 - Internal server error.</title>\r\n<style type=\"text/css\">\r\n<!--\r\nbody{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\nfieldset{padding:0 15px 10px 15px;} \r\nh1{font-size:2.4em;margin:0;color:#FFF;}\r\nh2{font-size:1.7em;margin:0;color:#CC0000;} \r\nh3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:\"trebuchet MS\", Verdana, sans-serif;color:#FFF;\r\nbackground-color:#555555;}\r\n#content{margin:0 0 0 2%;position:relative;}\r\n.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n-->\r\n</style>\r\n</head>\r\n<body>\r\n<div id=\"header\"><h1>Server Error</h1></div>\r\n<div id=\"content\">\r\n <div class=\"content-container\"><fieldset>\r\n '." |
|||
9
ditron
18.12.13
✎
13:51
|
Я так понимаю не в том формате реквест приходит
|
|||
10
Serginio1
18.12.13
✎
14:12
|
||||
11
Serginio1
18.12.13
✎
15:08
|
А с декстопа подключаешься?
|
|||
12
Serginio1
18.12.13
✎
15:18
|
||||
13
Serginio1
18.12.13
✎
16:00
|
(8) Кстати помню такая ошибочка у меня была при соедининнии без config файла
v8: 1С web-сервис, проблема с подключением из клиента C# WinRT |
|||
14
ditron
18.12.13
✎
16:49
|
13 эту ветку я уже изучал, а с дескотопа только в браузере, база опубликована полностью, в ней клиенты(покупатели) работают, клиент "мобильная платформа" работает под Андроид, чудесно, все те-же процедуры юзаю (Web-сервисы), а вот пишу для клиентов у которых Windows Phone на C# и застрял
|
|||
15
ditron
18.12.13
✎
16:50
|
А вот (10) это уже интересно, сейчас попробуем...
|
|||
16
ditron
18.12.13
✎
16:51
|
Я думаю дело все таки в заглушке сертификата
|
|||
17
ditron
18.12.13
✎
17:22
|
( это жесть... не получается, в (10) статья отличная но для десктопной SDK, а в WP оказывается не все реализовано
|
|||
18
Serginio1
18.12.13
✎
18:57
|
(14) Я имел ввиду с декстопа WCF. А какую ошибку выдает?
Вспомнил ошибку типа (8) выдавала когда изменения в Вэб сервисе происходили. |
|||
19
ditron
18.12.13
✎
19:07
|
По поводу (8) - ее уже нет, это было один раз когда я в ИИС включил ASP.net impersonation, но уже выключил иначе перестала служба вообще работать в том числе и вэб клиент
|
|||
20
ditron
18.12.13
✎
19:10
|
ошибка одна:
"The remote server returned an unexpected response: (401) Unauthorized. In Silverlight, a 404 response code may be reported even when the service sends a different error code." уже пробую конект по разному, и на прямую к локальному ИП где база опубликована, и через инет к https, меняя при этом "секурити моде" |
|||
21
Serginio1
18.12.13
✎
20:21
|
||||
22
Serginio1
18.12.13
✎
20:22
|
||||
23
ditron
19.12.13
✎
11:25
|
Ерунда это все, здесь что-то с авторизацией 1С в службе, я уже удалил Сервис из проекта и добавил новый с локальным IP без всякого шифрования, с телефона (он в локалке) страница службы открывается...
|
|||
24
Serginio1
19.12.13
✎
11:35
|
У тебя и ошибка другая чем здесь v8: 1С web-сервис, проблема с подключением из клиента C# WinRT
А с Декстопа то нормально соединяется? |
|||
25
ditron
19.12.13
✎
11:47
|
Да, другая. В смысле с десктопа?
|
|||
26
ditron
19.12.13
✎
11:54
|
Есть IIS сервер, на нем опубликована база (точнее три), одна публикация локальная в домен(для обмена с остальными двумя), вторая наружу (HTTPS), клиенты через Веб клиент работают. Все работает чудесно, девайс свой отладочный ввел в локалку через WI-FI в браузере ввожу локальный адрес службы (http://172.25.88.18/axor/ws/ws_mc.1cws?wsdl), открывается (после ввода логин-пароль) XML файл, как и должно быть, что не так не пойму, я так понимаю он не может пройти авторизацию 1С
|
|||
27
ditron
19.12.13
✎
11:58
|
конфиг службы в решении:
<configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="WSMobileClientSoapBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://172.25.88.18/axor/ws/ws_mc.1cws" binding="basicHttpBinding" bindingConfiguration="WSMobileClientSoapBinding" contract="AxorReference.WSMobileClientPortType" name="WSMobileClientSoap" /> </client> </system.serviceModel> </configuration> код: using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using AxorMobileClient.AxorReference; using System.ServiceModel; using System.ComponentModel; using System.IO.IsolatedStorage; namespace AxorMobileClient { public partial class MainPage : PhoneApplicationPage { const string wsUser = "******"; const string wsPwd = "******"; public static string User; public static string Pwd; public WSMobileClientPortTypeClient _WSClient; // Конструктор public MainPage() { InitializeComponent(); User = IsolatedStorageSettings.ApplicationSettings.LoadSetting("User", ""); Pwd = IsolatedStorageSettings.ApplicationSettings.LoadSetting("Pwd", ""); _WSClient = new WSMobileClientPortTypeClient(); _WSClient.ClientCredentials.UserName.UserName = wsUser; _WSClient.ClientCredentials.UserName.Password = wsPwd; _WSClient.OpenCompleted += new EventHandler<AsyncCompletedEventArgs>(_WSClient_OpenCompleted); _WSClient.CheckConnectionCompleted += new EventHandler<CheckConnectionCompletedEventArgs>(_WSClient_CheckConnectionCompleted); _WSClient.GetClientInfoCompleted += new EventHandler<GetClientInfoCompletedEventArgs>(_WSClient_GetClientInfoCompleted); _WSClient.GetTreeOrdersCompleted += new EventHandler<GetTreeOrdersCompletedEventArgs>(_WSClient_GetTreeOrdersCompleted); _WSClient.GetRestGoodsCompleted += new EventHandler<GetRestGoodsCompletedEventArgs>(_WSClient_GetRestGoodsCompleted); _WSClient.OpenAsync(); } private void _WSClient_OpenCompleted(object sender, AsyncCompletedEventArgs e) { MessageBox.Show("Opened"); } // CheckConnection() private void WSCheckConnection(string User, string Pwd) { _WSClient.CheckConnectionAsync(User, Pwd); } // EventHandler of CheckConnection private void _WSClient_CheckConnectionCompleted(object sender, CheckConnectionCompletedEventArgs e) { throw new NotImplementedException(); } // GetClientInfo() private void WSGetClientInfo(string User, string Pwd) { _WSClient.GetClientInfoAsync(User, Pwd); } // EventHandler of GetClientInfo void _WSClient_GetClientInfoCompleted(object sender, GetClientInfoCompletedEventArgs e) { ClientInfo.Text = e.Result; } // GetTreeOrders() private void WSGetTreeOrders(string User, string Pwd) { _WSClient.GetTreeOrdersAsync(User, Pwd, null, null); } // EventHandler of GetTreeOrders void _WSClient_GetTreeOrdersCompleted(object sender, GetTreeOrdersCompletedEventArgs e) { //TextBlock1.Text = e.Result; } // GetRestGoods() private void WSGetRestGoods(string User, string Pwd) { _WSClient.GetRestGoodsAsync(User, Pwd, false); } // EventHandler of GetRestGoods void _WSClient_GetRestGoodsCompleted(object sender, GetRestGoodsCompletedEventArgs e) { //TextBlock1.Text = e.Result; } private void btnUpdate_Click(object sender, EventArgs e) { switch (pPanel.SelectedIndex) { case 0: { WSGetClientInfo(User, Pwd); break; } case 1: { WSGetRestGoods(User, Pwd); break; } case 2: { WSGetTreeOrders(User, Pwd); break; } } } private void pPanel_SelectionChanged(object sender, SelectionChangedEventArgs e) { } private void miSettings_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("/SettingsPage.xaml", UriKind.Relative)); } } } |
|||
28
Serginio1
19.12.13
✎
12:36
|
(25) В смысле Клиента WCF из декстопного приложения.
Сначала лучше сделать на декстопном приложении отладить, а затем уж приступать к мобильному. (26) Если открывает wsdl то он проходит авторизацию. Единственно помню через браузер не подключалось если Юзер пароль были на кирилице. Ну и соответсвенно нужно смотреть какая авторизация на сервере 1С была на уровне Аутентификация 1С:Предприятия v8: web сервис авторизация 8.2 |
|||
29
ditron
19.12.13
✎
12:49
|
В том то и дело что SDK отличается десктоп и WP (надо ставить у меня VS Express for WP), в WP многого нет, все что нашел (статьи, форумы) все для десктопа, практически, я даже уверен что если напишу будет работать, жалко время тратить. Вот у Калиновского то что надо, но блин службы не 1С-ные. Сейчас полажу еще в настройках IIS.
Если что-то будет получатся обязательно отпишусь, я думаю тема многим будет интересна, сейчас мобильные приложения наберут большие обороты, кстати а вот тот-же клиент писал под андроид (правда там платформа встроена, там просто все конфигурацию написал, скомпилил, и на тебе) - работает же сволочь ) |
|||
30
Serginio1
19.12.13
✎
12:59
|
(29) Но ты сможешь посмотреть настройки в Конфиге и сравнить с мобильными. Просто у меня есть опыт работы с мобильными приложениями и проще олаживать на декстопном приложении, а затем переносить на мобильное. Кроме того еще есть фидлер и смотреть разницу в сообщениях
|
|||
31
Serginio1
19.12.13
✎
13:24
|
Кстати задай вопрос здесь http://www.rsdn.ru/
Там намного больше народу занимающихся C# для мобильных приложений |
|||
32
ditron
19.12.13
✎
15:26
|
Что такое фидлер?
|
|||
33
Serginio1
19.12.13
✎
15:30
|
||||
34
Serginio1
19.12.13
✎
15:47
|
Кстати иногда сообщения от сервера приходят не в стандарте SOAP. В этом случае ClientBase выдает муру типа (8) в SoapHttpClientProtocol выдает нормально пришедшее сообщение.
Фидлер показывает реальное отправленное и пришедшее сообщение |
|||
35
ditron
19.12.13
✎
16:05
|
ААААА
Включил автологин (28), конектится, данные приходят!!! |
|||
36
ditron
19.12.13
✎
16:05
|
Значит все таки в аутентификации дело... роем дальше
|
|||
37
Serginio1
19.12.13
✎
16:48
|
Кстати а на VS Express for WP есть пункт Edit WCF Configuration?
|
|||
38
ditron
19.12.13
✎
17:13
|
это в контекстном меню проекта?
я редактирую ServiceReferences.ClientConfig он в проекте присутствует |
|||
39
ditron
19.12.13
✎
17:18
|
и еще у меня VS руссифицированный офиц. релиз )
|
|||
40
Serginio1
19.12.13
✎
17:47
|
Сейчас подключился к известному мне сервису на 1С там нужно как в 24
либо поправить конфиг <binding name="ИмяТвоегоБиндинга"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Basic" /> </security> </binding> Но удобне это делать через Microsoft® Service Configuration Editor который вызывается в контекстном меню по клику правой копкой на app.config Но у тебя другая ошибка |
|||
41
Serginio1
19.12.13
✎
17:49
|
Но в 1С кстати 2 точки подключения. Видно WP не поддерживает Soap12
|
|||
42
Serginio1
19.12.13
✎
18:51
|
||||
43
ditron
19.12.13
✎
19:38
|
Да не поддерживает, я это с самого начала знал. Я же говорю тут проблема в авторизации, сейчас стоит автологин в vrd файле прописал ручками, и данные ходят. Админы дали доступ к консоли ИИС, там оказывается Basic Authentication выключен
|
|||
44
Serginio1
20.12.13
✎
10:53
|
Посмотри снифером что тебе сервер выдает
http://forum.ixbt.com/topic.cgi?id=24:31698:51#51 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |