콘솔 응용 프로그램에서 SOAP 서비스 용 클라이언트를 사용하고 있으며 SharePoint 2010으로 서비스 클라이언트를 이동해야합니다. 구성 파일 배포 및 기타 셰어 포인트 관련 작업을 원하지 않기 때문에 바인딩 정보를 하드 코드하기로 결정한 유일한 구성 가능한 옵션은 URL입니다. 그러나 나는 이것을하는 데 몇 가지 어려움을 겪었다.웹 서비스 구성을 코드로 변환
var service = new ServiceClient();
service.ClientCredentials.Windows.ClientCredential = new NetworkCredential("user", "password");
service.ClientCredentials.UserName.UserName = "user";
service.ClientCredentials.UserName.Password = "password";
var resp = service.Operation();
Console.WriteLine(resp.Response);
이 그것은 예상 작품과 같이
<system.serviceModel>
<bindings>
<customBinding>
<binding name="SI_PMProjectMaintain_SOUTBinding">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap11" writeEncoding="utf-8">
<readerQuotas maxDepth="10000000" maxStringContentLength="10000000"
maxArrayLength="67108864" maxBytesPerRead="65536" maxNameTableCharCount="100000" />
</textMessageEncoding>
<httpTransport authenticationScheme="Basic" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard" keepAliveEnabled="false"
proxyAuthenticationScheme="Basic" realm="XISOAPApps" useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://url/XISOAPAdapter/MessageServlet?senderParty=&senderService=Param1&receiverParty=&receiverService=&interface=interface&interfaceNamespace=url"
binding="customBinding" bindingConfiguration="SI_PMProjectMaintain_SOUTBinding"
contract="PmProjectMaintain.SI_PMProjectMaintain_SOUT" name="HTTP_Port" />
</client>
은 또한, 나는이 코드를 가지고 : 나는 설정을 가지고있다. 지금은 XML 설정의 없애과 completly 코드로 이동하려면 :
public class CustomHttpTransportBinding : CustomBinding
{
public CustomHttpTransportBinding()
{
}
public override BindingElementCollection CreateBindingElements()
{
var result = new BindingElementCollection();
result.Add(new TextMessageEncodingBindingElement
{
MaxReadPoolSize = 64,
MaxWritePoolSize = 16,
MessageVersion = MessageVersion.Soap11,
WriteEncoding = Encoding.UTF8,
//ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
//{
// MaxDepth = 10000000,
// MaxStringContentLength = 10000000,
// MaxArrayLength = 67108864,
// MaxBytesPerRead = 65536,
// MaxNameTableCharCount = 100000
//}
});
result.Add(new HttpTransportBindingElement
{
AuthenticationScheme = AuthenticationSchemes.Basic,
BypassProxyOnLocal = false,
HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard,
KeepAliveEnabled = false,
ProxyAuthenticationScheme = AuthenticationSchemes.Basic,
Realm = "XISOAPApps",
UseDefaultWebProxy = true
});
return result;
}
}
그리고는 다음과 같이 사용 :
var service = new ServiceClient(new CustomHttpTransportBinding(), new EndpointAddress(url));
service.ClientCredentials.Windows.ClientCredential = new NetworkCredential("user", "password");
service.ClientCredentials.UserName.UserName = "user";
service.ClientCredentials.UserName.Password = "password";
var resp = service.Operation();
Console.WriteLine(resp.Response);
그것은 서버에 도달하지만, 예외를 ("서버 오류"발생), 그래서 나는 나의 구성에 잘못된 점을 알았다. 독자 쿼터도 지정할 수 없습니다. 내가로드 configuration from string 시도했지만, 나를 위해, 같은 오류가 작동하지 않습니다. Confi 사용자 지정 바인딩을 XML에서 .net 3.5 코드로 변환 할 수없는 것 같습니다. 누군가 내 코드를보고 확인해 줄 수 있습니까? 코드에서 사용자 정의 바인딩을 사용하여 서비스 클라이언트를 가질 수있는 다른 방법이 있습니까?
당신은 리더 할당량을 지정하려고 할 때 어떻게됩니까? 또한 이벤트 뷰어에서 오류에 대한 정보가 있는지 확인 했습니까? – Tim
.net 4.5에서 동일한 쿼터를 지정하려고했습니다. 서버의 이벤트 뷰어를 의미합니까? 불행하게도 그것은 SAP 서비스이며 그 환경에 대한 액세스 권한이 없습니다. – boades