1

VS2010/.NET 4solution の Web サービスにプロキシを追加しました。私のマシンはWindows 7 OSです。クライアント .NET を構築するときに、次のエラーがスローされます。

ServiceModel クライアント構成セクションで、名前が 'FulfilmentServicesSoap' でコントラクトが 'FulfimentServiceSoap.FulfilmentServicesSoap' のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、この名前に一致するエンドポイント要素が client 要素に見つからなかったためである可能性があります。

ここでSOに関するsimlarタイプの質問を見つけました:

デフォルトのエンドポイント要素が見つかりませんでした

ただし、これを読んでいくつかの答えを試してもうまくいきませんでした。app.config ファイルを次のように何度も編集しました。

contract="IFulfimentServiceSoap" name="FulfilmentServicesSoap" />

contract="FulfimentServiceSoap.FulfilmentServicesSoap" name="FulfilmentServicesSoap" />

contract="MYFullNamespace.FulfimentServiceSoap.FulfilmentServicesSoap" name="FulfilmentServicesSoap" />

ただし、いずれの場合も、Web サービスを実行すると、構成ファイルを編集した場合でも、イベント ビューアにコントラクト 'FulfimentServiceSoap.FulfilmentServicesSoap' が表示されます。app.config ファイルの変更を取得するために他に何かしなければならないことはありますか、または他のアイデアはありますか?

編集 - app.config からバインディング情報を追加

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="FulfilmentServicesSoap" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/WLR3.Web.services/FulfilmentServices.asmx"
                binding="basicHttpBinding" bindingConfiguration="FulfilmentServicesSoap"
               contract="FulfimentServiceSoap.FulfilmentServicesSoap"name="FulfilmentServicesSoap" />
        </client>
    </system.serviceModel>

EDIT - クライアントが作成されるコード。

FulfimentServiceSoap.FulfilmentServicesSoap fulfilmentServices = new FulfimentServiceSoap.FulfilmentServicesSoapClient("FulfilmentServicesSoap");
4

2 に答える 2

2

SharePoint 機能など、web.config または app.config を使用しないプロジェクトをデプロイすると、コード ブロックが Web またはアプリの構成を読み取ることができず、以下の例外が発生する可能性があります。

Web またはアプリの構成エントリを操作するために、Web サービスを呼び出す前に以下のコード ブロックを使用できます。

BasicHttpBinding httpBinding = new BasicHttpBinding();
httpBinding.Name = "DMS_WSSoap";
httpBinding.CloseTimeout = new TimeSpan(0, 1, 0);
httpBinding.OpenTimeout = new TimeSpan(0, 1, 0);
httpBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
httpBinding.SendTimeout = new TimeSpan(0, 1, 0);
httpBinding.AllowCookies = false;
httpBinding.BypassProxyOnLocal = false;
httpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
httpBinding.MaxBufferSize = 65536;
httpBinding.MaxBufferPoolSize = 524288;
httpBinding.MaxReceivedMessageSize = 65536;
httpBinding.MessageEncoding = WSMessageEncoding.Text;
httpBinding.TextEncoding = Encoding.UTF8;
httpBinding.TransferMode = TransferMode.Buffered;
httpBinding.UseDefaultWebProxy = true;

httpBinding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
httpBinding.ReaderQuotas.MaxDepth = 32;
httpBinding.ReaderQuotas.MaxStringContentLength = 8192;
httpBinding.ReaderQuotas.MaxArrayLength = 16384;
httpBinding.ReaderQuotas.MaxBytesPerRead =  4096;
httpBinding.ReaderQuotas.MaxNameTableCharCount =16384;

httpBinding.Security.Mode = BasicHttpSecurityMode.None;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
httpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
httpBinding.Security.Transport.Realm = "";
httpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

//The url of web services.
EndpointAddress endpoint = new EndpointAddress("http://localhost/_layouts/DMS_WS/DMS_WS.asmx");

//one of the example web service which has been referenced in visual studio IDE.
LibraryWatcherWebService.DMS_WSSoapClient lservice = new LibraryWatcherWebService.DMS_WSSoapClient( httpBinding, endpoint);
于 2012-10-23T09:11:07.320 に答える
1

とにかく私のためにこれを理解しました - それが他の誰かを助ける場合に備えてここに投稿します. DLL が作成され、Application/Libraries フォルダーにコピーしました。(作成された app.config ファイルをコピーしませんでした)。クライアントを作成するコードでは、バインディングとエンドポイント アドレスの詳細をコーディングし、SoapClient コンストラクターに渡しました。したがって、そのための私のコードは次のようになります。

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress remoteAddress = new EndpointAddress("http://localhost/WLR3.Web.services/FulfilmentServices.asmx");
binding.Name = "FulfilmentServicesSoap";
binding.AllowCookies = false;

FulfimentServiceSoap.FulfilmentServicesSoap fulfilmentServices = new FulfimentServiceSoap.FulfilmentServicesSoapClient(binding, remoteAddress);
于 2012-04-13T13:26:28.353 に答える