私はWCF経由でスタンドアロンEXEからホストされている、とてもシンプルな小さなC#Webサービスを作成しました。コードは若干単純化されていますが、次のようになります。Delphi 2007の非IISホスト型WCF、C#Webサービスの使用方法
namespace VMProvisionEXE
{
class EXEWrapper
{
static void Main(string[] args)
{
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.None;
Uri baseAddress = new Uri("http://bernard3:8000/VMWareProvisioning/Service");
ServiceHost selfHost = new ServiceHost(typeof(VMPService), baseAddress);
try
{
selfHost.AddServiceEndpoint(typeof(IVMProvisionCore), myBinding, "CoreServices");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12;
selfHost.Description.Behaviors.Add(smb);
// Add MEX endpoint
selfHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.ReadLine();
残りのC#コード。上記のクラスVMPServiceはVMProvisionCore.IVMProvisionCoreを実装しています。
このサービスを使用するVisual Studio 2008クライアントアプリケーションを簡単に作成できます。問題はありません。しかし、Delphi 2007を使用することは別の問題です。 DelphiでWSDLインポータを使用してWSDLを取得することができます(この場合)http://bernard3:8000/VMWareProvisioning/Service?wsdlインポートユニットはうまくコンパイルされます。私は(C#のコードに示すように、余分な「/ CoreServicesに」の注意)WSDLのURLが含まれていないので、手動でプロキシを初期化する必要があります。
var
Auth: AuthenticateUser;
AuthResponse: AuthenticateUserResponse;
CoreI: IVMProvisionCore;
begin
CoreI:= GetIVMProvisionCore(False, 'http://bernard3:8000/VMWareProvisioning/Service/CoreServices');
Auth:= AuthenticateUser.Create;
try
Auth.username:= 'test';
Auth.password:= 'test';
AuthResponse:= CoreI.AuthenticateUser(Auth);
finally
FreeAndNIL(Auth);
end;
それがヒットしたときに上記のコードはエラーを生成します。 "CoreI.AuthenticateUser(Auth);"と入力します。エラーがある "がメッセージを処理できないため、コンテンツタイプ 'text/xmlで;のcharset = "UTF-8" はなかった、予想されるタイプ' アプリケーション/石鹸+ xmlの;のcharset = UTF-8"
IおそらくWSDLのインポート中や接続オプションなどの中で、私はどこかで愚かな小さなエラーが発生していると思われます。誰も助けることができますか?
最新のWSDLImp.exeはどこからダウンロードできますか?私はEmbarcaderoのWebサイトをチェックしましたが、バグ修正以外の参照は見つかりませんでした。 –