0

C# wpf で Web サービスを使用するのは初めてです。winforms を使用して Web サービスの例をダウンロードしました。そのwinformsアプリケーションからサーバーにファイルをアップロードすることができました。ここで、この winforms 機能を既存の WPF アプリケーションとマージしたいと考えています。winforms プロジェクトの Web 参照の下にある「アップローダー」を WPF プロジェクトに取得する方法がわかりません。これは、Web リファレンス「アップローダー」に含まれるコードです。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.18034
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------

// 
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.18034.
// 
#pragma warning disable 1591

namespace TestUploader.Uploader {
using System;
using System.Web.Services;
using System.Diagnostics;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.ComponentModel;


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="FileUploaderSoap", Namespace="http://tempuri.org/")]
public partial class FileUploader : System.Web.Services.Protocols.SoapHttpClientProtocol {

    private System.Threading.SendOrPostCallback UploadFileOperationCompleted;

    private bool useDefaultCredentialsSetExplicitly;

    /// <remarks/>
    public FileUploader() {
        this.Url = global::TestUploader.Properties.Settings.Default.TestUploader_Uploader_FileUploader;
        if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }

    public new string Url {
        get {
            return base.Url;
        }
        set {
            if ((((this.IsLocalFileSystemWebService(base.Url) == true) 
                        && (this.useDefaultCredentialsSetExplicitly == false)) 
                        && (this.IsLocalFileSystemWebService(value) == false))) {
                base.UseDefaultCredentials = false;
            }
            base.Url = value;
        }
    }

    public new bool UseDefaultCredentials {
        get {
            return base.UseDefaultCredentials;
        }
        set {
            base.UseDefaultCredentials = value;
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }

    /// <remarks/>
    public event UploadFileCompletedEventHandler UploadFileCompleted;

    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UploadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public string UploadFile([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] f, string fileName) {
        object[] results = this.Invoke("UploadFile", new object[] {
                    f,
                    fileName});
        return ((string)(results[0]));
    }

    /// <remarks/>
    public void UploadFileAsync(byte[] f, string fileName) {
        this.UploadFileAsync(f, fileName, null);
    }

    /// <remarks/>
    public void UploadFileAsync(byte[] f, string fileName, object userState) {
        if ((this.UploadFileOperationCompleted == null)) {
            this.UploadFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUploadFileOperationCompleted);
        }
        this.InvokeAsync("UploadFile", new object[] {
                    f,
                    fileName}, this.UploadFileOperationCompleted, userState);
    }

    private void OnUploadFileOperationCompleted(object arg) {
        if ((this.UploadFileCompleted != null)) {
            System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
            this.UploadFileCompleted(this, new UploadFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }

    /// <remarks/>
    public new void CancelAsync(object userState) {
        base.CancelAsync(userState);
    }

    private bool IsLocalFileSystemWebService(string url) {
        if (((url == null) 
                    || (url == string.Empty))) {
            return false;
        }
        System.Uri wsUri = new System.Uri(url);
        if (((wsUri.Port >= 1024) 
                    && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
            return true;
        }
        return false;
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
public delegate void UploadFileCompletedEventHandler(object sender, UploadFileCompletedEventArgs e);

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class UploadFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {

    private object[] results;

    internal UploadFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
            base(exception, cancelled, userState) {
        this.results = results;
    }

    /// <remarks/>
    public string Result {
        get {
            this.RaiseExceptionIfNecessary();
            return ((string)(this.results[0]));
        }
    }
}
}

#pragma warning restore 1591 

これに加えて、設定をwinformsからwpfに移行する方法がわかりません。私のwinformsで:

<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="TestUploader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>
<applicationSettings>
    <TestUploader.Properties.Settings>
        <setting name="TestUploader_Uploader_FileUploader" serializeAs="String">
            <value>http://xxx/videolibrary/Upload/FileUploader.asmx</value>
        </setting>
    </TestUploader.Properties.Settings>
</applicationSettings>

私の問題の最大の部分は、Web 参照の構造と機能を完全に理解していないことです。これがおそらく、私の質問の言い回しが間違っている可能性がある理由です。

- 編集 -

サービス参照の追加を使用すると、参照がwinformの元の参照とは異なるようです。左側が私の winforms ツリー、右側が私の wpf ツリー

! http://dl.dropbox.com/u/8308826/screen.jpg

4

1 に答える 1