Для пользователей Linux / Ubuntu, которые запускают Eclipse из модуля запуска (файл .desktop), который заблокирован для вашего модуля запуска, а в диалоговом окне «Справка -> О программе» не отображается lombok:
Кажется, это работает из-за некоторой проблемы с приложениями «lock to launcher», и это процесс разблокировки / блокировки, который исправляет это.
(Благодаря комментарию кардамона здесь , который указал мне на это решение)
WSDL можно изменить с помощью класса SoapExtensionReflector . Из Блог Кирка Эванса :
SoapExtensionReflector вызывается, когда ваш тип отражается, чтобы предоставить определение WSDL для вашей службы. Вы можете использовать этот тип, чтобы перехватить вызов отражения и изменить вывод WSDL.
В следующем примере удаляется первый метод из 2 методов веб-службы:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int Multiply(int a, int b)
{
return a * b;
}
}
Создайте класс, унаследованный от SoapExtensionReflector:
namespace TestWebservice
{
public class MyReflector : SoapExtensionReflector
{
public override void ReflectMethod()
{
//no-op
}
public override void ReflectDescription()
{
ServiceDescription description = ReflectionContext.ServiceDescription;
if (description.PortTypes[0].Operations.Count == 2)
description.PortTypes[0].Operations.RemoveAt(0);
if (description.Messages.Count == 4)
{
description.Messages.RemoveAt(0);
description.Messages.RemoveAt(0);
}
foreach (Binding binding in description.Bindings)
{
if (binding.Operations.Count == 2)
binding.Operations.RemoveAt(0);
}
if (description.Types.Schemas[0].Items.Count == 4)
{
description.Types.Schemas[0].Items.RemoveAt(0);
description.Types.Schemas[0].Items.RemoveAt(0);
}
}
}
}
Добавьте это в раздел config / system.web в web.config:
<webServices>
<soapExtensionReflectorTypes>
<add type="TestWebservice.MyReflector, TestWebservice" />
</soapExtensionReflectorTypes>
</webServices>
Это должно дать вам отправную точку для динамического удаления методов из документа WSDL. Вам также потребуется выбросить NotImplementedException из веб-метода, если он отключен.
Наконец, необходимо отключить документацию веб-службы, создаваемую путем вызова конечной точки .asmx без параметра? WSDL. Установите атрибут href элемента wsdlHelpGenerator на некоторый URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для вашего собственного обработчика документации. См. Вопрос о документации веб-служб в XML-файлах, август 2002 г. .
<webServices>
<soapExtensionReflectorTypes>
<add type="TestWebservice.MyReflector, TestWebservice" />
</soapExtensionReflectorTypes>
</webServices>
Это должно дать вам отправную точку для динамического удаления методов из документа WSDL. Вам также потребуется выбросить NotImplementedException из веб-метода, если он отключен.
Наконец, необходимо отключить документацию веб-службы, создаваемую путем вызова конечной точки .asmx без параметра? WSDL. Установите атрибут href элемента wsdlHelpGenerator на некоторый URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для вашего собственного обработчика документации. См. Вопрос о документации веб-служб в XML-файлах, август 2002 г. .
<webServices>
<soapExtensionReflectorTypes>
<add type="TestWebservice.MyReflector, TestWebservice" />
</soapExtensionReflectorTypes>
</webServices>
Это должно дать вам отправную точку для динамического удаления методов из документа WSDL. Вам также потребуется выбросить NotImplementedException из веб-метода, если он отключен.
Наконец, необходимо отключить документацию веб-службы, создаваемую путем вызова конечной точки .asmx без параметра? WSDL. Установите атрибут href элемента wsdlHelpGenerator на некоторый URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для вашего собственного обработчика документации. См. Вопрос о документации веб-служб в XML-файлах, август 2002 г. .
Установите атрибут href элемента wsdlHelpGenerator на некоторый URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для вашего собственного обработчика документации. См. Вопрос о документации веб-служб в XML-файлах, август 2002 г. . Установите атрибут href элемента wsdlHelpGenerator на некоторый URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для вашего собственного обработчика документации. См. Вопрос о документации веб-служб в XML-файлах, август 2002 г. .XMLRPC довольно мертв, не так ли?
SOAP подразумевает WSDL. Как вы генерируете WSDL динамически?
Вам следует изучить использование WCF. Я ожидаю, что вы сможете взять под контроль процесс генерации WSDL (и других метаданных), но вы также сможете контролировать обработку входящих сообщений. В частности, вы сможете исследовать входящие сообщения, чтобы определить, какой сценарий запустить, какие параметры передать и т. Д.
Должен ли быть интерфейс SOAP? Похоже, это может быть более подходящим для API на основе маршрута / REST / и т. Д. Вы можете сделать что-то в ASP.NET MVC (с помощью специального метода IController.Execute
, который разрешает действие метода) довольно легко (на самом деле, я работаю над чем-то очень похожим для некоторых моего собственного кода на данный момент).
Например, у вас могут быть маршруты:
http://myserver/myservice/mymethod
, которые принимают (в теле или в аргументах) полезную нагрузку (параметры) и возвращают результат в ответе. Вне-MVC вы должны иметь возможность делать что-то подобное с помощью универсального обработчика с отображением подстановочных знаков.
Вы можете создать службу WCF с типом ввода и вывода xs: any
и обрабатывать входящий запрос как необработанное сообщение
. Это позволит вам принимать данные любого типа и возвращать данные любого типа. Вы не должны использовать контракты данных или статические типы, только сообщение
на входе и сообщение
на выходе.
Проблема с этим подходом состоит в том, что создание прокси из WSDL действительно ничего не делает чтобы помочь потребителю, кроме предоставления оболочки для вызова метода. Предоставление данных, приемлемых для метода, потребует ручного изменения типов данных и т. Д., Что не так сложно, это просто не так интуитивно понятно, как жестко типизированный контракт.
Вот предложение:
Создайте WSDL из WCF, используя информация в следующем блоге сообщение:
http://www.pluralsight.com/community/blogs/kirillg/archive/2006/06/18/28380.aspx
Затем вы можете опубликовать эту информацию с использованием MEX.
После этого службы будут открыты для вашего клиенты для загрузки метаданных и вызовите сервисную службу.