Я не уверен, что это правильный способ сделать это, но в конце концов мне удалось создать специальный сериализуемый класс для аутентификации и добавить настраиваемый заголовок к запросу.
LanDB.NetworkServiceInterfaceClient client = new LanDB.NetworkServiceInterfaceClient();
String token = client.getAuthToken("user", "name", "domain");
Auth tokenAuth = new Auth(token);
LanDB.DeviceInfo selectedPLCInfo = new LanDB.DeviceInfo();
// Add a SOAP autentication Header (Header property in the envelope) to the outgoing request.
using (new OperationContextScope(client.InnerChannel))
{
MessageHeader aMessageHeader = MessageHeader.CreateHeader("Auth", "", tokenAuth);
OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader);
selectedPLCInfo = client.getDeviceInfo("plcHostname");
}
С класс
[DataContract]
public class Auth
{
[DataMember]
string token;
public Auth(string value)
{
token = value;
}
}
Таким образом, запрос XML будет правильно построен и отправлен.
Кроме того, ничего из этого не требуется, если я добавляю службу как веб-службу вместо Справка по обслуживанию. В этом случае я получаю в клиенте объект, который я могу установить (AuthValue) с правильным токеном, и клиентский код обрабатывает все. Go цифра!