WPF增加了来自其他winforms项目的文件上传服务

本文关键字:文件 服务 项目 winforms 增加 其他 WPF | 更新日期: 2023-09-27 18:05:12

我是c# wpf中使用web服务的新手。我下载了一个使用winforms的web服务示例。我设法从winforms应用程序上传文件到我的服务器。现在我想将这个winforms功能与我现有的WPF应用程序合并。我不知道如何在我的winforms项目中获得web引用下的"上传器"到我的WPF项目。这是web引用"uploader"包含的代码:

//------------------------------------------------------------------------------
// <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引用的结构和功能。这可能就是为什么我的问题措辞错误的原因。

——编辑——

当我使用添加服务引用时,引用似乎与我的winforms中的原始引用不同。左边是winforms树,右边是wpf树

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

WPF增加了来自其他winforms项目的文件上传服务

您应该将其添加为服务引用。Web引用是WCF服务的旧版本,它存在于。net 2中。在你的WPF项目中,你应该添加服务引用。

阅读http://andrewtokeley.net/archive/2008/07/10/the-difference-between-ldquoadd-web-referencerdquo-and-ldquoadd-service-referencerdquo.aspx了解它们的不同之处以及如何使用它们