0

我是在 C# wpf 中使用 web 服务的新手。我使用 winforms 下载了一个 webservice 示例。我设法从该 winforms 应用程序将文件上传到我的服务器。现在我想将此 winforms 功能与我现有的 WPF 应用程序合并。我无法找到如何将我的 winforms 项目中 Web 引用下的“上传器”获取到我的 WPF 项目。这是网络参考“上传器”包含的代码:

//------------------------------------------------------------------------------
// <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>

我最大的问题是我不完全了解网络参考的结构和功能。这可能是我的问题措辞错误的原因。

- 编辑 -

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

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

4

1 回答 1

1

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

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

于 2013-03-22T12:28:20.967 回答